客户端禁用了cookie,怎么实现session技术共享多个页面

如果用户禁用浏览器的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可以生效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值