我正在为我的会话使用“文件存储”。当我运行时:
Session::set('awesomekey', 'myVal123');
刷新页面,我可以看到每次在/ storage / session中创建新文件。我以为它每次都会更新同一个文件。这基本上意味着会话根本不起作用。换句话说,如果它不断重新创建会话文件,这永远不会起作用:
Session::get('awesomekey');
或者至少,它返回一个空白。我错过了什么可能导致每次加载页面时都会创建一个新的会话密钥?
更新
在进一步调查中,似乎在每次页面加载时都会重新生成cookie。可能导致什么?
我还没有看到登录,所以这些信息对我来说毫无用处 - > http://willworkforbanjos.com/2014/02/laravel-sessions-not-working-in-4-1/
当我简单地将上面的set和get代码放在master.blade.php文件中时,我的问题就出现了。它应该设置它,存储信息,并在下次重新加载时从会话中获取正确的信息。但它不能,因为在重新加载时它将cookie更改为其他一些代码。
任何人都知道为什么会这样吗?
更新2
要清楚我要做的事情。我在HomeController.php中添加以下代码:
public function index()
{
Session::put('awesomekey', 'myVal123');
return View::make('home.index');
}
然后我把它放在我的master.blade.php中:
print Session::get('awesomekey');
除了这个,我在代码的控制器端不包含任何“die”或随机回声。当我第一次打开文件时,我可以看到myVal123被打印出来。
然后我在控制器中取出这部分:
Session::put('awesomekey', 'myVal123');
然后重新加载页面。它现在什么都不打印。我可以在浏览器中看到cookie已更改。生成一个新的cookie将失去对会话的引用,所以我不知道每次都在理解它为什么这样做,即使它在第一次加载时保存会话。
还有什么想法?
更新3
我也尝试过:
我在这里真的没有想法......
更新4
我去了SessionManager.php,就在下面:
$ lifetime = $ this-> app ['config'] ['session.lifetime'];
我打印出了终身价值:
print $lifetime; die();
此代码从未在页面重新加载时被点击?!但是,在我的控制器中添加它:
$d = Config::get('session.lifetime');
print $d;
事实上是否会终身打印出我的价值.... :(
答案 0 :(得分:4)
问题在于这一行:
'cookie' => 'xxxx.com',
在session.php中。如果你有“。”,它显然会丢失cookie。在cookie名称中。我无法相信Laravel不喜欢那样。或者也许它是浏览器的一般。
答案 1 :(得分:1)
我相信你正在使用:
'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.
|
*/
您可以使用以下代码获取lifetime
文件中设置的app/config/session.php
值:
Config::get('session.lifetime');
答案 2 :(得分:1)
在Chrome开发者工具或Firebug中查看Cookie的过期时间。如果设置为0,那么cookie将立即过期。
另外,请仔细检查您的时钟是否设置正确 - 如果您的主机与浏览器的时钟之间存在差异,则可能会发生奇怪的事情。让两个系统都咨询NTP以确保这不是问题。
答案 3 :(得分:1)
我遇到类似的会话问题,如果你使用的是模型用户,而你的用户表没有将primaryKey作为Id,你必须在模型中覆盖该变量。
class User extends Eloquent {
protected $primaryKey = 'admin_id';
}
答案 4 :(得分:1)
在/app/config/session.php中,选中“仅HTTPS Cookie”设置。
如果您不使用SSL,请确保它是“secure => false”!
答案 5 :(得分:0)
使用Session :: put('value')而不是set。