session_regenerate_id(): Session object destruction failed

yii框架登录时,遇到这个错误,找到存储session的文件夹,将所有session文件删除,再次刷新,登录成功

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码是一个 session 的简单实现,但是缺少了 session 超时功能的具体实现。下面是补全后的代码: ```php <?php header("Content-Type: text/html; charset=UTF-8"); $expires = 60 * 20; // session 超时时间,单位为秒 function check_user_agent() { if (isset($_SESSION['HTTP_USER_AGENT'])) { if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) { exit('客户端信息异常'); } } else { $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']); } } function start_session($expire = 0) { session_start(); // 如果 $expire 不为 0,表示 session 超时时间为 $expire 秒 if ($expire != 0 && isset($_SESSION['last_visit'])) { $time_last = time() - $_SESSION['last_visit']; if ($time_last > $expire) { // 如果超时 session_unset(); // 释放所有的 session 变量 session_destroy(); // 销毁 session exit("<a href='login.html'>请重新登录</a>"); } } $_SESSION['last_visit'] = time(); // 更新 session 最后访问时间 check_user_agent(); // 检查 user-agent 一致性 session_regenerate_id(true); // 重置 session ID } ?> ``` 补全后的代码加入了 session 超时功能,通过比较当前时间和上次访问时间的差值来判断是否超时,如果超时则销毁 session 并输出重新登录的链接。同时,代码中还调用了 `check_user_agent()` 函数来检查 user-agent 的一致性,防止伪造 user-agent。最后,代码中还调用了 `session_regenerate_id()` 函数来重置 session ID,增强 session 的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值