【问题标题】:Session not saving in Laravel 5.1会话未在 Laravel 5.1 中保存
【发布时间】:2015-10-15 10:01:04
【问题描述】:

好的,所以当有人登录时,我试图在登录时存储会话。我正在存储会话,保存它,但是在下一页,我无法检索该会话。这是一个空输出。存储文件夹设置为 775,所以我不明白为什么它不会写入。顺便说一句,Auth session get 是写的,它只是没有被存储的 Session::put() 键。下面是代码:

LoginController.php

if(Auth::attempt(['username' => $this->user, 'password' => $inp->password, 'Login' => $this->acct]))
        {
            # [2]: If TRUE, Create sessions, redirect
            $authArr = SubUsers::join('sub_services as ss', 'sub_users.userid', '=', 'ss.userid')->where('sub_users.username', $this->user)->first()->toArray();

            // Create The Sessions
            Session::put('Username', $this->user);  # constant | User that's currently logged in
            Session::put('Account', $this->acct);   # changing | Account Data being passed to view
            Session::save();

            Session::push('Auth', $authArr);

            // Redirect
            if(Session::has('lasturl')){
                $lasturl = Session::get('lasturl');
                return Redirect::to($lasturl);
            }
            else { return Redirect::to($this->startScreen); }
        }

BaseAppController.php

public function __construct()
{
    dd(Session::has('Username')); # [ This Returns Null ]
}

更新: 下面是存储在 storage/framework/sessions 文件夹中的会话。它被正确存储:

a:8:{s:6:"_token";s:40:"dEf3bJ4vz9fjiUuVnjD5EKNIKgJ38UzgZ0q4aE7K";s:9:"_previous";a:1:{s:3:"url";s:43:"http://localhost:8888/alpha/public/settings";}s:5:"flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}s:38:"login_82e5d2c56bdd0811318f0cf078b78bfc";i:78;s:8:"Username";s:4:"demo";s:7:"Account";s:4:"demo";s:4:"Auth";a:1:{i:0;a:20:{s:6:"userid";i:78;s:7:"groupid";N;s:5:"Login";s:4:"demo";s:8:"username";s:4:"demo";s:8:"password";s:60:"$2y$10$9Q1/zGeRrrDwl2rfjmkIWuWv3V/LpgFVYR/68PjANCsIkKmIVRVAu";s:4:"name";s:11:"John Babtis";s:5:"email";s:16:"jo@relatient.net";s:14:"remember_token";s:60:"2dqaWk56uJ1ldTdHhLcGg5U47JGxAD7EKdqwlr5qpPMGat9BKpMTf8tDtUlL";s:13:"userserviceid";i:81;s:9:"SuperUser";i:1;s:13:"MasterAccount";i:1;s:14:"canCreateUsers";i:1;s:12:"canEditUsers";i:1;s:2:"hm";i:1;s:6:"demand";i:1;s:9:"pophealth";i:1;s:12:"appointments";i:1;s:7:"reports";i:1;s:8:"settings";i:1;s:12:"canEditChild";i:1;}}s:9:"_sf2_meta";a:3:{s:1:"u";i:1437755751;s:1:"c";i:1437755740;s:1:"l";s:1:"0";}}

【问题讨论】:

  • 在保存会话后立即尝试dding 会话,以确保您存储的值不是null
  • 那里存放。转储表明了这一点。它还在存储后立即显示一个值。当它重定向页面时,就是当会话拉空时。
  • 为方便起见,这是转储中的此部分:s:8:"Username";s:4:"demo";s:7:"Account";s:4:"demo";
  • @亚历山大。不是问题。出于某种原因,PHP / Laravel 对“用户名”区分大小写。一旦我将其重命名为“用户名”,一切正常。在我眼里这很神奇,因为我不认为 PHP 使用这个术语。我能看出它为什么不起作用的唯一原因是 Auth 服务提供者是否可能重写了会话变量?

标签: php session laravel-5


【解决方案1】:

试试看,username 全部小写。请记住,PHP 区分大小写。

【讨论】:

  • 我将密钥存储为“用户名”。事实上,检查我的编辑,它有一个会话转储被写入 storage/framework/sessions 文件夹
  • 尝试以小写形式保存。
  • 这根本没有帮助......他在两个地方都使用了确切的键名。
  • 为什么我完全不知道。用户名是 Laravel 还是 PHP 中的全局变量?我真的很想解释一下这个魔法。 :)
  • 这背后的原因与身份验证提供者/外观有关吗?它可能是在重写用户名会话吗?我只是没有看到 PHP 语言将其用作术语或全局变量。
【解决方案2】:

因此,为了更准确地回答 navasd 答案,Illuminate\Auth\Guard.php 文件中的 Guard.php 会覆盖用户名。

它按名称存储会话,出于某种原因,它将用户名存储为 null 并覆盖了我的 Session::put('Username') 会话变量。不过,将其重命名为“用户名”是可行的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2015-09-15
    • 2016-09-20
    • 2019-07-12
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多