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了。

(1)修改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中了。

s1.php

php
session_start();
$_SESSION[’var1’]="源码爱好者";
$url="下一页";
echo $url;
?>

s2.php

php
session_start();
echo "传递的session变量var1的值为:".$_SESSION[’var1’];
?>
可以亲自测试一下。

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

s1.php

复制代码
php
session_start();
$_SESSION[’var1’]="源码爱好者";
$sn = session_id();
$url="$sn."">下一页";
echo $url;
?>
复制代码

s2.php

php
session_id($_GET[’s’]);
session_start();
echo "传递的session变量var1的值为:".$_SESSION[’var1’];
?>
最后,使用隐藏表单的做法与上边的例子差不多,只不过是将sessionID写到某个隐藏的表单组件中,然后在服务端取到这个sessionID。

你可能感兴趣的:(PHP)