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

修改密碼如何同時銷毀同一用戶的所有session

fgt1t5y

問題描述

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

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

截圖

993 5 0
5個回答

TM

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

  • 暫無評論
qqxxr

看你的session有無入庫呀,或者有長鏈接推送?

  • 暫無評論
fgt1t5y

做了點補充

  • qqxxr 2023-12-13

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

  • fgt1t5y 2023-12-13

    ok

ichynul

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

weplus

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

<?php
declare(strict_types=1);

namespace platform\service;

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

class AdminAuth
{
    /**
     * 賬號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
    {
        // 登錄時間
        $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 . ',歡迎回來!', $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)限判斷等其他代碼...
}

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

年代過于久遠,無法發(fā)表回答
??