【问题标题】:How to get the session ID stored in database?如何获取存储在数据库中的会话 ID?
【发布时间】: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 完全不同,请与我们分享完成的代码......我可以帮助你。

标签: php session laravel eloquent


【解决方案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'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 2010-11-01
    • 2018-10-15
    • 2018-03-07
    • 2017-12-13
    • 1970-01-01
    • 2020-09-11
    相关资源
    最近更新 更多