如何获取存储在数据库中的会话 ID?

Posted

技术标签:

【中文标题】如何获取存储在数据库中的会话 ID?【英文标题】:How to get the session ID stored in database? 【发布时间】:2015-02-26 14:43:25 【问题描述】:

我正在尝试通过制作另一个模型Sessions 在会话表中添加额外信息。我正在使用以下问题答案中详述的方法;

Laravel session table add additional column

表格

字段:

id - varchar(50) - laravel 在这里存储一个 40 个字符的字符串 有效负载 - 中文本 - 通常为 265 个字符的字符串 last_activity - int(11) user_id - bigint(20) type - varchar(15) - default('biz') created_at - 时间戳 - 默认(CURRENT_TIMESTAMP)

型号

class Sessions extends BaseModel

    protected $table = 'sessions';
    protected $fillable = array(
        'id', 
        'payload', 
        'last_activity', 
        'user_id', 
        'type', 
        'created_at');

    public static function getCurrent()
    
        return Sessions::find(Session::getId());
    
 

控制器

public function postLogin()

    if (\Auth::biz()->attempt(\Input::only(array('email', 'password')), 
        \Input::get('persist', 'no') == 'yes')) 
        $session = Sessions::getCurrent(); // returns NULL
        // fields getting values
        $session->save();
        return \Redirect::route('marketer.home');
     else 
        return \Redirect::back()->withInput()->with('loginFail', true);
    

我正在使用 laravel v4.2.16 和基于数据库的会话管理。 Session::getId() 函数不会返回存储在数据库中的 id,因此我无法通过我的 Sessions::getCurrent() 方法获取当前会话的模态。

该方法之前有效,因此我们在其上构建了许多优化查询。

【问题讨论】:

表存在于数据库中吧? Session::getId() 返回什么?空? @VitoNordloh 是的,该表存在。我试过用 dd(Session::getId()) 运行它,它返回一个类似编码的字符串,它与 id 列下的任何内容都不匹配。 @UmairAhmed,在同一个会话中?还是重新登录? @LeaTano 不,同一个会话。 @UmairAhmed session_id 是完全不同还是更短?如果它更短,请确保会话列长度足够大。如果 session_id 完全不同,请与我们分享完成的代码......我可以帮助你。 【参考方案1】:

你需要调用静态Session::unguard();获取id然后Session::reguard();

【讨论】:

【参考方案2】:

试试这个:

$user = \Auth::user(); in the view file

然后将 $user 变量打印为:

echo "<pre>";
print_r($user);
echo "</pre>";
exit;

看看,如果这有帮助。

【讨论】:

不,我不需要这里的用户。我想从数据库中获取当前会话的行。 奇怪,刚登录用户,我就把dd(Session::has(\Auth::biz()->id()));它返回 false 而 \Auth::biz()->check() 返回 true... 在您的 Auth Redirect 部分更改为: return \Redirect::route('marketer.home')->with(array('key' => 'value'));然后回显 Session::has('key'); 试试这个:print_r(Session::has(\Auth::biz()->toArray())); 第一个返回false,第二个返回'Call to a member function toArray() on a non-object'

以上是关于如何获取存储在数据库中的会话 ID?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用会话ID从php mysql中的两个或多个表中获取值

Fastlane:如何自动获取 Apple ID 的登录会话?

如何通过ID获取其他用户信息(用户名,名字)? [Keycloak]

如果我有会话 ID,如何获取会话参数详细信息

如何获取已存储在另一个模型中的名称 ID,并使用名称 ID 在 laravel 的数据透视表数据库中存储值?

PHP Laravel:如何设置或获取会话数据?