如果用户禁用浏览器的cookie 那么就不能在一次会话中用同一份session
原因在于:在禁用cookie以后,的确是在服务器端创立了session文件, 服务器也的确是返回来set cookie的信息。但是因为浏览器禁用了cookie所以不会接受到。 所以每一次发送请求都会创建新的session,
当用户禁用cookie以后,每次访问的时候,都会创建一个session 后果就是无法让多个php页面去共享同一份session文件,糟糕了
解决方案:
从底层机制入手,首先要明白,为什么多个页面可以共享session。 从 cookie session http 这三个方面入手解决事情。
在没有禁用cookie的时候,会传递一个PHPSESSID这个东西,所以我们可以先获取这个PHPSESSID,然后我们自己来传递啊
然后叫服务器不要创建新的session,而是获取那个sessionId
在MyHall.php中添加如下东西
session_start(); //开启session
$sid=session_id(); //获取sessionid
echo "<a href='ShopProcess.php?bookid=001&bookname=第一本书&PHPSESSID=&sid>第一本书</a><br/>";
在ShowCart.php中添加如下东西
//不能让服务器创建一个新的session
//注意:设置session_id()必须在session_start()之前调用
if(isset(&_GET['PHPSESSID'])){
session_id($_GET['PHPSESSID']);
}
session_start();
总结问题
请问客户端禁用了cookie,怎么实现session技术共享多个页面
答:
- 方案一 在每个超链接上添加一个PHPSESSID=sessionId;
同时在每个页面加入if(isset($_GET['PHPSESSID'])){ // 设置session_id session_id($_GET['PHPSESSID']); } session_start();....
- 方案二 使用常量 在超链接action header("Location:xx")可以直接拼接SID常量即可
echo "sid===".SID.; 直接传入SID - 方案三 透明的SID支持
php.ini 配置选项,里面有一个session.use_trans_sid=0设置为1
(在herf action header会自动添加SID,但是js跳转不会自动增加); 重启apache可以生效