php 禁用COOKIE获得SESSION
我们知道当客户端浏览器把COOKIE禁掉后,服务器端的SESSION是没有办法正常使用的。因为服务器端的SESSION是通过 SESSIONID来区分不同用户的SESSION的,而这个SESSIONID就是通过客户端的COOKIE传递到服务器端的,更严格地说,因为在 PHP使用session_start()语句后,会向客户端发送一个头部信息,其中就指定了此次SESSION会话的SESSIONID,此 SESSIOID就是存放在客户端的COOKIE中的,现在COOKIE禁掉后,当然就无法保存SESSIONID了。
下面是session_start()的输出的头部信息:
[code]Content-type: text/html
X-Powered-By: PHP/4.3.3
Set-Cookie: PSD=9b577c86baea8a15ebe15b220ee1e180; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
[/code]
现在可以确定把COOKIE禁掉后,无法使用SESSION。那遇到这种情况,客户就是要禁COOKIE,而且我们又要保证这部分用户能正常使用,该怎么办呢?办法就是使用PHP的output_add_rewrite_var这个函数。
这样就不怕禁用COOKIE了,因为SESSIONID会自动跟在URL后面而且FORM中会出现SESSIONID的HIDDEN值。在服务器端照常使用SESSION就可以了。
测试代码:test.php
[code]<?php
session_start();
$_SESSION['test'] = 1;
output_add_rewrite_var('PHPSESSID',session_id ());
echo '<a href="test1.php">link</a>';
?>[/code]
test1.php:
[code]<?php
session_start();
print_r($_SESSION);
?>[/code]