我在一个项目中的laravel会话(4.2)真的非常糟糕。 每次重新加载它都会生成一堆会话文件(例如它配置为文件)或数据库行(aprox。每行请求20行/文件),我无法弄清楚原因。以下是我为解决此问题而采取的行动:
1)我已经检查了我的php.ini,session.gc_maxlifetime是1440。
2)我已经检查过脚本中没有早期打印。
3)我已经检查过composer dump-autoload无法解决问题。
4)我已经检查过原生PHP会话是否正常并且持续存在。
5)我已经使用了laravel migration来生成会话表(所以它不是列类型的问题)。
6)我删除了我的供应商文件夹并锁定了文件并执行了作曲家安装。
事情是,我昨天回家并拉了一个新的laravel项目,会议工作得很好。到底能发生什么事?
为了澄清,我有一个带有动作的控制器:
public function getIndex()
{
var_dump(Session::getId());
Session::save();
session_start();
var_dump(session_id());
die('die');
}
打印:
string '4505ed48069f6c468c5d3a3c1c6e6094db8d989d' (length=40)
string 'b24gbst01gdulo77o4utfq6id2' (length=26)
die
当刷新时,保留了php本地会话ID,但laravel id每次都不同。
这是我的laravel session.php:
'driver' => 'file',
'lifetime' => 120,
'expire_on_close' => false,
'files' => storage_path().'/sessions',
'connection' => 'mysql',
'table' => 'sessions',
'lottery' => array(1, 1000),
'cookie' => 'laravel_session',
'path' => '/',
'domain' => 'mydomain',
'secure' => false,
任何提示?
答案 0 :(得分:1)
Laravel避免使用本机php会话实现,原因是无法理解。
laravels session和php natives session之间的会话ID不匹配,可以安全地忽略。
我见过类似的问题,通常可以通过删除浏览器cookie /会话缓存并重新启动浏览器来解决。 (是的,这是2015年,我们正在这样做,上帝帮助我们。)
答案 1 :(得分:0)
很久以前我遇到过这个问题。经过几天的搜索,我发现了这一点。 laravel generateSessionId函数存在问题。你可以在这里找到这个方法crm / vendor / laravel / framework / src / Illuminate / Session / Store.php .. line:171
protected function generateSessionId()
{
// return sha1(uniqid('', true).str_random(25).microtime(true));
return md5('Getpikk');
}
这是我在这个问题上要克服的。我希望它对你也有所帮助。