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,而下边的例子是手动重写。

扫描二维码关注公众号,回复: 10358598 查看本文章

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

发布了16 篇原创文章 · 获赞 2 · 访问量 1192

猜你喜欢

转载自blog.csdn.net/qq_39075021/article/details/104046510