以上修改GetVerify 函数,对http和https访问有影响?
简短回答:有影响,而且是好的影响——它会让系统对 HTTP 和 HTTPS 的切换变得更“宽容”,不会再因为协议变了就直接把你踢下线。
但这里面有一个非常关键的“坑”,必须提前跟你说清楚,否则改完之后可能会陷入“永远登不进去”的死循环。
为什么有影响?
在老代码里,session_start() 是“裸奔”的。当你用 HTTPS 登录时,浏览器可能给它打上了一个“安全锁”(Secure 属性)。当你切回 HTTP 时,浏览器发现当前是不安全的协议,就不把这个“安全锁”Cookie 发给服务器,服务器收不到,就认为你没登录。
我在改的代码里加了:
@ini_set('session.cookie_path', '/');
@ini_set('session.cookie_samesite', 'Lax');
这两句的意思是:不管你是在哪个目录下,也不管你是不是跨站点击进来的,这个登录凭证(Session)都跟着你走。 这能很大程度抵消因为浏览器安全策略导致的“掉线”。
⚠️ 绝对要注意的“致命坑”:不要加 Secure
在改代码的时候,千万不要在里面加上这一句:
// 千万别加这句!
@ini_set('session.cookie_secure', 1);
cookie_secure = 1 的意思是“这个 Cookie 只能在 HTTPS 下传输”。如果你加了这句,而你现在用的是 http:// 访问,那么浏览器会彻底拒收这个 Cookie,你连密码输对了都进不去。所以我给你的代码里特意去掉了这一项。
如果你同时在用 HTTP 和 HTTPS(混合环境)
如果你的论坛平时是用 http:// 访问,但某些特殊页面(或者你之前设置的)强制用 https://,这会产生两个不同的会话。
在 http:// 下登录,生成了一个 Session 文件。
点进 https:// 页面,浏览器认为这是新环境,又生成一个空的 Session 文件。
这种情况下,无论怎么改代码都没用,因为协议不同,Session ID 根本传不过去。
终极解决办法:统一协议
既然你后台能用 HTTP 进去,且你们这个站也没有强制全站 HTTPS 的硬性要求,强烈建议你把全站的链接统一成 HTTP。
去后台 -> 核心设置 -> 站点 URL,确保是
http://www.vtu425.com。
检查 global.php 或配置文件里,有没有写死 https:// 的地方。
以后你自己登录,就固定用你的后台地址,别一会儿加 s,一会儿不加 s,浏览器就不会精分了。
总结: 刚才那个 GetVerify 的修改是安全的,它通过放宽路径和跨站限制,帮你稳住了 Cookie。只要你不手贱去加 cookie_secure,并且保持访问协议统一,以后再也不会出现“刷新就掉线”的灵异事件了!