解决thinkphp设置session周期无效的问题

本文详细介绍了如何解决ThinkPHP项目中session周期设置无效导致用户登录状态丢失的问题,通过修改function.php文件和配置文件,实现session保存15天,确保用户登录状态持久。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.baijunyao.com/article/50


thinkphp的session设置周期是无效的;

直接的影响就是无法保留用户的登陆状态;

用thinkphp开发的项目;关闭浏览器后用户就退出了;

即便设置了session周期也没作用;

这个bug存在很久了;但是thinkphp官网一直没处理更新;

吐槽完毕;下面来解决这个bug;

首先需要在 /Thinkphp/Common/funtion.php 公告函数的第1213行添加如下内容;

如果不是在1213行;就搜索gc_maxlifetime

1
2
3
4
5
// 1213行原代码
if (isset( $name [ 'expire' ]))           ini_set ( 'session.gc_maxlifetime' $name [ 'expire' ]);
 
// 改成如下代码
if (isset( $name [ 'expire' ]))           ini_set ( 'session.gc_maxlifetime' $name [ 'expire' ]); ini_set ( 'session.cookie_lifetime' $name [ 'expire' ]);

原代码:

白俊遥博客


更改后的代码:


白俊遥博客


然后在配置项/Application/Common/conf/config.php中添加如下代码

1
2
3
4
5
6
7
//***********************************SESSION设置**********************************
     'SESSION_OPTIONS'          =>   array (
         'name'                 =>   'BJYSESSION' ,                     //设置session名
         'expire'               =>  24*3600*15,                       //SESSION保存15天
         'use_trans_sid'        =>  1,                                //跨页传递
         'use_only_cookies'     =>  0,                                //是否只开启基于cookies的session的会话方式
     ),

ok;大功告成;

ThinkPHP 5 中,Session 是用于存储用户状态信息的一种机制。如果你发现重新设置 Session 的值后没有生效,可能是以下几个原因: 1. **初始化问题**:确保你在需要设置 Session 之前已经正确初始化了 session。在配置文件 `config.php` 中开启 session,并设置正确的驱动如 'file', 'redis' 等。 ```php // config.php 'app.session' => [ // 使用 file 驱动存储 session 'driver' => 'file', 'save_path' => APP_PATH . 'runtime/session/', ], ``` 2. **清除失效会话**:如果某个会话已经过期,设置新的值将不会起作用。你可以尝试手动清除失效的 session,然后重新设置。 ```php // 清除失效会话 $session = new \think\Session(); $session->clear(); ``` 3. **跨域问题**:如果是在前后端分离或者跨域名的情况下,由于默认的同源策略限制,你需要处理好 cookie 或者设置 CORS 来允许跨域访问。 4. **编码问题**:检查你存储到 session 的数据是否进行了适当的编码,因为 PHP 的 session 数据默认是字符串形式。 5. **刷新问题**:如果你只是更新了 session 的某个键对应的值,而未重新保存整个 session,那么旧的值可能会仍在。要解决这个问题,可以使用 `set()` 函数设置整个 session。 ```php // 设置整个 session $session->set([ 'username' => 'new_value', ]); $session->save(); // 确保保存 ``` 如果以上步骤都试过了还是无效,可能是程序中的其他代码干扰了 session 的操作,建议查看相关的错误日志或打印调试信息查找问题根源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值