国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

修改密碼如何同時(shí)銷(xiāo)毀同一用戶的所有session

fgt1t5y

問(wèn)題描述

正在實(shí)現(xiàn)一個(gè)用戶自助修改密碼的功能,請(qǐng)問(wèn)如何做到用戶在一個(gè)終端修改了密碼,在所有終端退出登錄(銷(xiāo)毀session)?求指教

補(bǔ)充:目前使用的是redis+webman自帶的 session() 處理用戶狀態(tài),key只有session id 沒(méi)有 uid,難點(diǎn)在于如何確定登錄了這同一個(gè)賬號(hào)的所有會(huì)話。

截圖

954 5 0
5個(gè)回答

TM

刪掉session 客戶端下次請(qǐng)求不都自己退出登錄了嗎?

  • 暫無(wú)評(píng)論
rbb

看你的session有無(wú)入庫(kù)呀,或者有長(zhǎng)鏈接推送?

  • 暫無(wú)評(píng)論
fgt1t5y

做了點(diǎn)補(bǔ)充

  • rbb 2023-12-13

    那你這入庫(kù)的姿勢(shì)就要改啊,唯一用戶id為key來(lái)映射你的多個(gè)token,改完密碼后刪除這個(gè)用戶id的數(shù)據(jù)就ok了唄

  • fgt1t5y 2023-12-13

    ok

ichynul

修改密碼時(shí)間存緩存或數(shù)據(jù)庫(kù)里面,檢查session里面的用戶的密碼修改時(shí)間,不一樣就自動(dòng)退出。

weplus

設(shè)置session的時(shí)候自定義session名稱,下面是我用的。
根據(jù)需要我封裝了uuid函數(shù)和加密類。

<?php
declare(strict_types=1);

namespace platform\service;

use platform\extend\Code;
use platform\model\Account;

class AdminAuth
{
    /**
     * 賬號(hào)Session名稱
     *
     * @var string
     */
    protected string $account_session = 'account_session';

    /**
     * 用于解密的key
     * @var string
     */
    protected string $account_key = 'account_key';

    /**
     * 構(gòu)造方法
     *
     * @access public
     */
    public function __construct()
    {
        $this->account_session = uuid(4, false, request()->host() . 'account_session');
        $this->account_key = uuid(4, false, request()->host() . 'account_key');
    }

    /**
     * 設(shè)置登錄
     *
     * @param mixed $admin Builder|Model|object
     * @return void
     */
    public function setLogin(mixed $admin): void
    {
        // 登錄時(shí)間
        $admin->login_at = date('Y-m-d H:i:s');
        // 登錄IP地址
        $admin->login_ip = request()->getRealIp();
        $session = request()->session();
        $admin->save();
        $session->put(['tip' => $admin->account . ',歡迎回來(lái)!', $this->account_session => Code::encryption(json_encode($admin), $this->account_key)]);
    }

    /**
     * 退出登錄
     *
     * @return bool
     */
    public function clearLogin(): bool
    {
        $session = request()->session();
        $session->forget($this->account_session);
        return $session->has($this->account_session);
    }

    // 權(quán)限判斷等其他代碼...
}

修改密碼時(shí)調(diào)用AdminAuth的clearLogin,修改成功后跳轉(zhuǎn)到指定頁(yè)面,也可以直接刷新當(dāng)前頁(yè)面,在中間件檢查session,不存在就轉(zhuǎn)到登錄頁(yè)面。

年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??