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

时间:2014-12-30 12:20:05

标签: php session laravel eloquent

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

Laravel session table add additional column

字段:

  • id - varchar(50) - laravel在这里存储一个40个字符的字符串
  • payload - mediumtext - 通常为265个字符的字符串
  • last_activity - int(11)
  • user_id - bigint(20)
  • type - varchar(15) - 默认(' biz')
  • created_at - timestamp - default(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()方法获取当前会话的模态。

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

2 个答案:

答案 0 :(得分:0)

试试这个:

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

然后将$ user变量打印为:

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

看,如果有帮助。

答案 1 :(得分:0)

您需要调用静态Session::unguard();获取ID,然后调用Session::reguard();