是否有固有的方法将会话设置在一段时间后过期。我目前的设置似乎在30分钟后到期,我想禁用它或至少增加它,但我找不到Laravel中可以设置的任何地方?
答案 0 :(得分:37)
在app/config/session.php
中你有:
lifetime
选项,允许您设置会话过期时间(以分钟为单位)(不是几秒钟)
'lifetime' => 60,
表示会话将在一小时后过期。
此处还有一个设置:
'expire_on_close' => true,
决定浏览器关闭时会话是否会过期。
您可能感兴趣的其他设置也是php.ini
值:
session.cookie_lifetime = 0
和
session.gc_maxlifetime = 1440
这些是默认值。
第一个意味着会话cookie的存储时间 - 默认值为0(直到浏览关闭)。第二个选项意味着在多少秒 PHP可能会破坏此会话数据之后。
我说可能是因为session.gc_probability
文件中还有另一个选项php.ini
决定了运行垃圾收集器的可能性。默认情况下,只有1%的几率在1440秒(24分钟)之后会破坏此会话数据。
答案 1 :(得分:22)
检查 php.ini ,它有session.gc_maxlifetime的值(以及 session.cookie_lifetime ),它设置了PHP允许的时间限制会议持续。当Laravel设置选项时,它会将cookie_lifetime
作为app/config/session.php
中设置的值传递。
但是,在达到最大生命周期后,会话不会立即过期。发生的事情是经过那段时间后,会话可以由垃圾收集器删除。
解决问题
一种解决方法是检查您的php.ini
文件。您可以定义此变量:session.gc_maxlifetime
。默认情况下,它设置为1440. 只需评论或删除。
从此时起,您的session会话可能会正常使用您的session.php配置值。
答案 2 :(得分:9)
从Laravel 4.1开始删除本机PHP会话支持
配置会话生存期编辑app/config/session.php
并设置以下内容:
/* if this is set to 'native' it will use file.
if this is set to 'array' sessions will not persist across requests
effectively expiring them immediately.
*/
'driver' => 'file'
/* number of minutes after which the session is available for Laravel's
built in garbage collection.
Prior to 4.1 you could set this to zero to expire sessions when
the browser closes. See the next option below.
*/
'lifetime' => 60
/* If true sessions will expire when the user closes the browser.
This effectively ignores your lifetime setting above.
Set to false if you want Laravel to respect the lifetime value.
If your config file was written before 4.1 you need to add this.
*/
'expire_on_close' => false,
参考文献:
在命令行运行artisan changes 4.1.*
,查看有关native
会话驱动程序等同于file
的说明
$ artisan changes 4.1.* | grep -i native
-> Native session driver has been replaced by 'file'. Specifying 'native' driver will just use the new file driver.
答案 3 :(得分:5)
App\Config\Session.php
检查一生......
你也可以设置......
Cookie::make('name', 'value', 60); // 1 hr