php 如何在Laravel中设置session timeout?

drnojrws  于 2023-06-21  发布在  PHP
关注(0)|答案(5)|浏览(173)

是否有一种固有的方法来设置会话在某个时间后过期。我当前的设置似乎在30分钟后到期,我想禁用它或至少增加它,但我找不到Laravel中可以设置它的任何地方?

mxg2im7a

mxg2im7a1#

app/config/session.php中,您有:
lifetime
允许您设置会话过期时间(以分钟为单位,而不是以秒为单位)的选项

'lifetime' => 60,

表示会话将在一小时后过期。
这里还有一个设置:

'expire_on_close' => true,

决定当浏览器关闭时会话是否过期。
您可能感兴趣的其他设置还有php.ini值:

session.cookie_lifetime = 0

和/或

session.gc_maxlifetime = 1440

这些是默认值。
第一个表示会话cookie将存储多长时间-默认值为0(直到浏览关闭)。第二个选项表示在多少后PHP可以销毁此会话数据。
我说可能是因为在php.ini文件中还有一个选项session.gc_probability,它决定了运行垃圾收集器的可能性。默认情况下,在1440秒(24分钟)后,此会话数据将被销毁的概率只有1%。

juzqafwq

juzqafwq2#

检查你的php.ini,它有一个session.gc_maxlifetime(以及session.cookie_lifetime)的值,该值设置了PHP允许会话持续的时间限制。当Laravel设置选项时,它将cookie_lifetime作为app/config/session.php中设置的值传递。
但是,会话不会在达到最大生存期后立即过期。发生的情况是,在经过该时间量之后,会话可以被垃圾收集器移除。

解决问题

一种解决方法是检查php.ini文件。你可以定义这个变量:session.gc_maxlifetime。默认设置为1440。* 发表评论或删除 *.
从现在开始,您的会话可以使用您的session.php配置值正常工作。

k10s72fa

k10s72fa3#

原生PHP会话支持从Laravel 4.1开始被删除

要配置会话生存期,请编辑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,

参考文献:

  • 讨论为什么原生PHP会话被删除。(因为它会自动将cookie信息添加到头文件中,如果框架想要完全 Package 请求/响应,这需要做很多工作)
  • 其他Laravel会话驱动程序
  • Laravel 4.0到4.1升级指南中讨论的expire_on_close配置选项

在命令行中运行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.
tez616oj

tez616oj4#

App\Config\Session.php
检查终身…
您还可以设置…

Cookie::make('name', 'value', 60); // 1 hr
vq8itlhq

vq8itlhq5#

您也可以处理.env文件的这种形式
.env文件SESSION_LIFETIME=120

相关问题