Session Laravel会话密钥始终在更改?
我正在使用“文件存储”进行会话。当我运行此命令时:Session Laravel会话密钥始终在更改?,session,laravel-4,Session,Laravel 4,我正在使用“文件存储”进行会话。当我运行此命令时: Session::set('awesomekey', 'myVal123'); 然后刷新页面,每次我都可以看到在/storage/session中创建的新文件。我假设它每次都会更新同一个文件。这基本上意味着会话根本不起作用。换句话说,如果它一直在重新创建会话文件,则此操作永远不会起作用: Session::get('awesomekey'); 或者至少,它返回一个空白。我遗漏了什么可能导致每次加载页面时创建新会话密钥 更新 在进一步的调查中
Session::set('awesomekey', 'myVal123');
然后刷新页面,每次我都可以看到在/storage/session中创建的新文件。我假设它每次都会更新同一个文件。这基本上意味着会话根本不起作用。换句话说,如果它一直在重新创建会话文件,则此操作永远不会起作用:
Session::get('awesomekey');
或者至少,它返回一个空白。我遗漏了什么可能导致每次加载页面时创建新会话密钥
更新
在进一步的调查中,cookie似乎是在每次页面加载时重新生成的。是什么原因造成的
我甚至还没有登录,所以这些信息对我来说是无用的-->
当我简单地将上述集合放入master.blade.php文件并获取代码时,问题就出现了。它应该设置它,存储信息,并在下次重新加载时从会话中获取正确的信息。但它不能,因为在重新加载时,它将cookie更改为其他代码
有人知道为什么会这样吗
更新2
public function index()
{
Session::put('awesomekey', 'myVal123');
return View::make('home.index');
}
然后我把它放在master.blade.php中:
print Session::get('awesomekey');
我不包括任何“死亡”或随机回声在我的控制器端的代码,除了这个。当我第一次打开文件时,我可以看到myVal123正在打印出来
然后我取出控制器中的这部分:
Session::put('awesomekey', 'myVal123');
$d = Config::get('session.lifetime');
print $d;
然后重新加载页面。现在它什么也不打印。我可以在浏览器中看到cookie已更改。生成一个新cookie将丢失对会话的引用,因此我一直试图理解为什么每次都这样做,即使它在第一次加载时保存了会话
还有什么想法吗
更新3
我还尝试:
print $lifetime; die();
这个代码在重新加载页面时从未被命中?!但是,在我的控制器中添加以下内容:
Session::put('awesomekey', 'myVal123');
$d = Config::get('session.lifetime');
print $d;
实际上是否打印出我的终身价值…:(使用Session::put('value')而不是set
我相信您正在使用:
'lifetime' => 0 // number of minutes
在您的app/config/session.php文件中。将其设置为:
'lifetime' => 120 // number of minutes or whatever you want
它会工作的。我尝试了与您描述的相同的设置,只是使用了0
,我得到了相同的结果,每次创建一个新文件,但一旦我将其更改为120
左右,它就会工作。因此,如果在会话配置中将其设置为'life'=>0
,那么每次它都会为新的SES创建一个新文件,这是有意义的因为会话不活动,所以请转到您的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
文件中设置的life
值:
Config::get('session.lifetime');
在Chrome developer tools或Firebug中查看cookie的过期时间。如果将其设置为0,则cookie将立即过期
另外,请仔细检查您的时钟设置是否正确-如果主机和浏览器的时钟不一致,可能会发生奇怪的事情。请让两个系统都咨询NTP以确保这不是问题。问题出在这一行:
'cookie' => 'xxxx.com',
显然,如果你有一个“.”,它会丢失cookie在cookie名称中。我不敢相信Laravel不喜欢这样。或者可能是浏览器的一般情况。我在会话中遇到了类似的问题,如果您使用的是model User,并且您的users表没有primaryKey作为Id,则必须在model中覆盖该变量
class User extends Eloquent {
protected $primaryKey = 'admin_id';
}
在/app/config/session.php中检查“仅HTTPS Cookie”设置
如果不使用SSL,请确保其为“secure=>false!”我遇到过与此相关的问题。并非每次都创建会话文件,但有时我就是无法显示会话变量。经过数小时的实验,我发现问题与此有关
如果您使用的是Debugbar并且存在会话问题,请禁用它,然后重试确认。尝试使用会话闪存,它将仅适用于下一个请求,除非您重新刷新它。您可以详细说明一下吗?我的问题是我的cookie正在重新生成,我需要了解原因。您可以发布更多相关代码吗?您是否尝试存储som从您的控制器而不是从您的视图在会话中进行设置?您解决了吗?我有相同的问题。在本地运行良好,但在服务器上运行不正常。请提供建议。感谢您显示差异,但这没有什么不同这不是问题,session::put()
使用session::set()
我现在无法确认,因为发生这种情况的设置是在另一台笔记本电脑上,但我99.999%确定我确实设置了这个值。还有什么可以这样做呢?在我按照您在0
lifetime中描述的方式进行设置之后,我也发生了这种情况。最好的是:-)交叉手指这就是问题所在。今晚见,这不行。我将我的“一生”设置为“一生”=>1440这不起作用。我正在用更多信息更新机票。同时看看这是否是一个问题:这确实有帮助。每次我加载页面时,它都会说cookie的过期时间是现在。所以,我的“lifetime”变量不知何故被重写了。我还将检查我所有的提交,看看是否在任何代码之间都没有留下随机的“回音”或“打印”。搜索仍在继续…这是同一个问题吗