近日公司内部频道改版,有几个同事反映无法登陆新版和注册,但可以在老版正常登录使用。
分析一下新版和旧版的不同之处:
新版登录验证用了COOKIE + SESSION
老版登录验证只用了 COOKIE。
用户的浏览器登录新版时,COOKIE 中的 PHPSESSID 被 改成了 ,_PHPSESSID ,造成 SESSION 无法跨页面传递,所以登录会失败。
暂且不管用户浏览器中的 SESSIONID 是被什么东东篡改的,想解决这个问题有2个办法.
办法一:修改session_name
直接修改 php.ini 找到 session.name = PHPSESSID , 改为 session.name = 自定义名称
----------------------------------------------------------------------------------------------------------------------------
办法二:自动匹配cookie
在所有使用SESSION的页面,调用session_start(); 语句之前加入以下代码
$session_name = session_name();
if(!isset($_COOKIE[$session_name]))
{
foreach($_COOKIE as $key=>$val)
{
$key = strtoupper($key); //转换为大写
//如果包含 session_name 关键字则把该字串当做 sessionid 启用
if(strpos($key,$session_name))
{
session_id($_COOKIE[$key]);
}
}
}
session_start();
更新时间:2012-2-17