PHP:客户端禁用cookie之后如何使用session

在服务器端,要使用session,最本质的问题是要能够在服务器端拿到session的ID。

通常情况下,在开启了session的页面中,即使用了session_start()的页面,首次访问的时候,会产生一个新的session,并有一个与之对应的sessionID,服务器会将这个sessionID通过http响应头部的set-cookie字段返回给客户端(浏览器),浏览器会将其保存在cookie中。当再次访问该页面的时候,sessionID会被放到http请求头部的cookie字段中,发送给服务器,服务器通过这个sessionID取得相应的session内容。

当客户端禁用了cookie之后,就不能通过以上方式来使用session了。

使用cookie的本质就是保存sessionID,并将sessionID发送给服务器。如果能有其他方式将sessionID发送给服务器,问题也就解决了。

解决方法,就是将sessionID写到URL中或者写到表单的隐藏组件中,这样就能够在服务器端获得sessionID了。

  • 修改php.ini

修改session.use_trans_sid=1 ,表示当客户端浏览器禁止cookie的时候,页面上的链接会基于url传递SESSIONID。但是很多人仅仅设置了这一个选项并没有达到效果,本人也遇到此问题,后来一番研究发现php.ini 文件中还有两个选项

session.use_cookies=1
session.use_only_cookies=1

仔细琢磨上面的英文就会发现其意义
session.use_cookies表示是否开始基于cookies的session会话
session.use_only_cookies 表示是否只开启基于cookies的session的会话方式
所以如果想要在浏览器开启cookie的时候用基于cookie的方式,在未开启cookie的时候使用url的方式就进行如下设置(最常用的方式,推荐)
在php.ini文件中

session.use_trans_sid=1
session.use_only_cookies=0
session.use_cookies=1

这样就可以,本质还是重写了URL,将sessionID以查询字符串的方式添加在URL中了。

a.php

<?php
session_start();
$_SESSION['var1']="源码爱好者";
$url="<a href=".""b.php">下一页</a>";
echo $url;
?>

b.php

<?php
session_start();
echo "传递的session变量var1的值为:".$_SESSION['var1'];
?>

可以亲自测试一下。
下边这个例子与上边的效果是一样的,只不过上边的例子是服务器自动重写了URL,而下边的例子是手动重写。

c.php

<?php
session_start();
$_SESSION['var1']="源码爱好者";
$sn = session_id();
$url="<a href=".""d.php?s=".$sn."">下一页</a>";
echo $url;
?>

d.php

<?php
session_id($_GET['s']);
session_start();
echo "传递的session变量var1的值为:".$_SESSION['var1'];
?>

最后,使用隐藏表单的做法与上边的例子差不多,只不过是将sessionID写到某个隐藏的表单组件中,然后在服务端取到这个sessionID。
————————————————
版权声明:本文为CSDN博主「不要忘了为什么出发」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_27988539/article/details/77621040

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值