【问题标题】:Trying to avoid Duplicate User's Session Records in Session Table: Laravel试图避免会话表中重复用户的会话记录:Laravel
【发布时间】:2016-12-22 12:15:09
【问题描述】:

此表中的示例数据如下所示:

表中有多个重复的用户会话记录。

vendor\laravel\framework\src\Illuminate\Session\DatabaseSessionHandler.php

在上面的文件路径中,我们有下面的方法

public function write($sessionId, $data)
{
    $payload = $this->getDefaultPayload($data);

    if (! $this->exists) {
        $this->read($sessionId);
    }
    if ($this->exists) {
        $this->getQuery()->where('id', $sessionId)->update($payload);
    } else {
        $payload['id'] = $sessionId;

        $this->getQuery()->insert($payload);
    }

    $this->exists = true;
}

它检查会话 ID。

问题

我可以避免在会话表中创建重复的用户会话记录吗?会话配置文件中是否有这样做的标志?

【问题讨论】:

  • 这允许用户从许多不同的设备和/或浏览器登录,因此他可以通过手机和计算机访问应用程序。您想在用户登录时从所有其他实例中注销该用户吗?
  • 我只想保留一个会话。
  • 顺便说一句,这会有帮助吗? stackoverflow.com/questions/33311771/…
  • 目的是什么?为什么要恢复旧会话?
  • @Helper 您是否使用内置身份验证(工匠制作:身份验证)?我可以为此目的编辑 \App\Http\Auth\AuthController 吗?

标签: php laravel laravel-5 laravel-5.2 laravel-5.1


【解决方案1】:

根据您的问题,您只想在数据库中保留一个用户会话,这意味着一个用户只能从一台设备登录,例如如果您已经从 chrome 登录,那么如果您从 firefox 登录,您的 chrome 登录状态将被删除.

要实现这一点,您可以在App\Http\Controllers\Auth\AuthController 中编写一个函数:

public function authenticated(Request $request,User $user){
    $previous_session = $user->session_id;

    if ($previous_session) {
    \Session::getHandler()->destroy($previous_session);
    }

    Auth::user()->session_id = \Session::getId();
    Auth::user()->save();
    return redirect()->intended($this->redirectPath());
}

此函数将在登录前从数据库中销毁先前的会话。 有关更多信息,您应该检查 Trait:Illuminate\Foundation\Auth\AuthenticatesUsers

【讨论】:

    【解决方案2】:

    看来你的性格有误,应该是这样吧? :

     if (! $this->exists) {
        $this->read($sessionId);
    }else{
    
       if ($this->exists) {
           $this->getQuery()->where('id', $sessionId)->update($payload);
       } else {
           $payload['id'] = $sessionId;
           $this->getQuery()->insert($payload);
       }
    }
    

    【讨论】:

    • 很抱歉,我认为这段代码与我的问题中已经存在的代码相同?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    相关资源
    最近更新 更多