用360浏览器添加产品到购物车,购物车列表是空的,通过观察数据库ecs_cart表发现同一客户端每次添加产品session_id都会新建一次。
某些情况下,在同一个标签页中,用$_SERVER['HTTP_USER_AGENT']取得360浏览器提交的内容也是会变化的,具体见下面两段。
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)
问题的关键就出在这儿,有时说自己是IE7,有时说自己是IE8。
在includes/cls_session.php文件的96行:
if ($this->gen_session_key($tmp_session_id) == substr($this->session_id, 32))
这个判断就没法通过了(详见$this->gen_session_key()方法),于是就重新建立了一个session ID。
解决方案:
打开includes/cls_session.php文件,将gen_session_key()方法里的retrun语句换成
return sprintf(‘%08x’, crc32(ROOT_PATH . $ip . $session_id));
备注:360浏览器在4.1版本里解决了这个Bug