【问题标题】:Laravel session key changing the whole time?Laravel 会话密钥一直在变化?
【发布时间】:2014-04-02 10:40:56
【问题描述】:

我正在为我的会话使用“文件存储”。当我运行这个时:

Session::set('awesomekey', 'myVal123');

刷新页面,我可以看到每次都在 /storage/session 中创建新文件。我认为它每次都会更新同一个文件。这基本上意味着会话根本不起作用。换句话说,如果它不断地重新创建会话文件,这永远不会奏效:

Session::get('awesomekey');

或者至少,它返回一个空白。我错过了什么可能导致每次加载页面时都创建新的会话密钥?

更新

经过进一步调查,似乎每次加载页面时都会重新生成 cookie。可能是什么原因造成的?

我还没有考虑登录,所以这些信息对我来说毫无用处 --> http://willworkforbanjos.com/2014/02/laravel-sessions-not-working-in-4-1/

当我简单地将上述设置并在 master.blade.php 文件中获取代码时,我的问题正在发生。它应该设置它,存储信息,并在下一次重新加载时从会话中获取正确的信息。但它不能,因为在重新加载时它会将 cookie 更改为其他代码。

有人知道为什么会这样吗?

更新 2

  1. 向 session.php 添加:'lifetime' => 120 无效。 (@Sheikh Heera)
  2. 仅将代码放在控制器中,不起作用。 (@Phill Sparks)
  3. 我尝试了 chrome 和 firefox,结果相同 (@The Shift Exchange)

只是为了清楚我想要做什么。我在 HomeController.php 中添加以下代码:

public function index()
{
    Session::put('awesomekey', 'myVal123');
    return View::make('home.index');
}

然后我把它放在我的 master.blade.php 中:

print Session::get('awesomekey');

除此之外,我的代码控制器端没有包含任何“死”或随机回声。当我第一次打开文件时,我可以看到 myVal123 被打印出来。

然后我在控制器中取出这部分:

Session::put('awesomekey', 'myVal123');

然后重新加载页面。现在它什么也不打印了。我可以在浏览器中看到 cookie 已更改。生成一个新的 cookie 将丢失对会话的引用,所以我一直试图理解为什么每次都这样做,即使它在第一次加载时保存了会话。

还有什么想法吗?

更新 3

我也试过了:

  1. 运行“php artisan dump-autoload”...仍然不起作用
  2. 我去了这里:http://www.whatismybrowser.com/are-cookies-enabled ... 是的,cookie 已启用。

我真的没办法了……

更新 4

  1. 我去了 SessionManager.php,就在下面:

    $lifetime = $this->app['config']['session.lifetime'];

我打印出了生命时间的价值:

print $lifetime; die();

而且这个代码在页面重新加载时从来没有命中过?!但是,将其添加到我的控制器中:

$d = Config::get('session.lifetime');
print $d;

实际上打印出我一生的价值.... :(

【问题讨论】:

  • 尝试使用会话闪存,它只会对下一个请求有效,除非您重新刷新它
  • 您能详细说明一下吗?我的问题是我的 cookie 正在重新生成,我需要了解原因?
  • 能贴出更多相关代码吗?
  • 您是否尝试从控制器而不是视图存储会话中的内容?
  • 你修好了吗?我有同样的问题。在本地运行良好,但在服务器上运行良好。请指教。

标签: session laravel-4


【解决方案1】:

问题出在这一行:

'cookie' => 'xxxx.com',

在 session.php 中。显然,如果你有一个“。”它会丢失 cookie。在 cookie 名称中。我不敢相信 Laravel 不喜欢这样。或者可能是一般的浏览器。

【讨论】:

  • 下划线也是同样的问题吗?
  • 是的,我想是的。但是尝试并确认?
  • 我删除了下划线。但我仍然有问题。页面的每次加载都会创建一个新会话,而不会使旧会话过期。
【解决方案2】:

我相信你正在使用:

'lifetime' => 0 // number of minutes

在您的app/config/session.php 文件中。让它变成这样:

'lifetime' => 120 // number of minutes or whatever you want

它会起作用的。我尝试了与您描述的相同的设置,并且只使用了0,并且每次创建新文件时都会得到相同的结果,但是一旦将其更改为120 左右,它就可以工作。因此,如果在会话配置中将其设置为'lifetime' => 0,那么每次它只是为新会话创建一个新文件,因为会话不存在,这是有道理的。因此,转到您的app/config/session.php 文件,您会发现类似这样的内容,更改值:

/*
|--------------------------------------------------------------------------
| Session Lifetime
|--------------------------------------------------------------------------
|
| Here you may specify the number of minutes that you wish the session
| to be allowed to remain idle before it expires. If you want them
| to immediately expire on the browser closing, set that option.
|
*/

更新:

您可以使用以下代码来获取app/config/session.php 文件中设置的lifetime 值:

Config::get('session.lifetime');

【讨论】:

  • 我现在无法确认,因为发生这种情况的设置是在另一台笔记本电脑上,但我 99.999% 确定我确实设置了这个值。还有什么可以做到这一点?
  • 在我设置与0lifetime 相同的方式后,它也发生在我身上。一切顺利:-)
  • 交叉手指这就是问题所在。今晚会看到。
  • 这不起作用。我将我的“生命周期”设置为“生命周期”=> 1440
  • 这不起作用。我现在正在用更多信息更新票证。
【解决方案3】:

在 Chrome 开发者工具或 Firebug 中查看 cookie 的过期时间。如果设置为 0,则 cookie 将立即过期。

另外,请仔细检查您的时钟是否设置正确 - 如果您的主机和浏览器的时钟之间存在差异,可能会发生奇怪的事情。让两个系统都咨询 NTP 以确保这不是问题。

【讨论】:

  • 也看看这是否不是问题:stackoverflow.com/a/21835934/401467
  • 这确实有帮助。每次我加载页面时,它都会说 cookie 的过期时间是现在。所以,我的“终身”变量不知何故被覆盖了。我还将检查我所有的提交,看看是否在任何代码之间没有留下随机的“回声”或“打印”。搜索继续……
【解决方案4】:

我在会话中遇到了类似的问题,如果您使用模型 User 并且您的 users 表没有作为 Id 的 primaryKey,您必须在模型中覆盖该变量。

class User extends Eloquent {

     protected $primaryKey = 'admin_id';

}

【讨论】:

    【解决方案5】:

    在 /app/config/session.php 中检查“HTTPS Only Cookie”设置。

    如果您不使用 SSL,请确保它是“secure => false”!

    【讨论】:

      【解决方案6】:

      我遇到过与此相关的问题。会话文件并非每次都创建,但有时我无法显示会话变量。经过几个小时的实验,我发现问题与Debugbar有关。

      如果您在使用 Debugbar 并遇到会话问题,请将其禁用并再次尝试确认。

      【讨论】:

        【解决方案7】:

        使用 Session::put('value') 而不是 set。

        http://laravel.com/docs/session#session-usage

        【讨论】:

        猜你喜欢
        • 2020-05-30
        • 2015-02-14
        • 2015-09-15
        • 2017-02-14
        • 2018-03-17
        • 1970-01-01
        • 1970-01-01
        • 2014-05-31
        • 2021-09-02
        相关资源
        最近更新 更多