再谈关于SESSION的传递

来源:互联网 发布:android网络开发 编辑:程序博客网 时间:2024/05/01 08:23

我所说的传递是指新打开一个浏览器窗口转递,而不是在原窗口打开新页面的传递,原窗口打开新页面时PHP自己就会传递的

 

我们知道,在调用session_start()时,如果SESSION是基于COOKIE传递的话(大多都是这样),

 

PHP会创建一个COOKIE来保存当前的SESSIONID

 

 

于是乎我就在想,只要我们在页面打开时,读到当前COOKIE里面的SESSIONID,然后在session_start()之前指定下,

 

这样就可以传递SESSION了

 

 

可实际并非如此,

 

例如:

 

当我们打开页面,并刷新一下后,会看到COOKIE内已经保存了PHPSESSID变量,并且就是我们的SESSION ID

 

这时,我们把session_start();这句注释掉

 

再打开新窗口  然后打开页面,我们会发现$_cookie内并没有前一页面创建的PHPSESSID变量

 

想了好久,最后发现其实原因很简单

 

 

那是因为PHP在创建COOKIE的时候,是根据INI文件内的COOKIE失效时间来设置其生效时间,绝部分服务器的配置文件内都会是0,也就是关闭窗口就失败

 

 

所以我们在新打开窗口内读取另一个页面的COOKIE时,虽然另一个页面没有关闭,但是在新窗口内的COOKIE已经失效了

 

所以,我们只要在session_start()后面再把session_name为变量的COOKIE重新设置一下,并指定一下时间,然后只要

 

在指定时间内打开任何新窗口,都能得到这个COOKIE值的,然后再设定一下session_id,就可以在不同窗口间传递SESSION了

 

 

我的处理是这样的:

我的getCookie和makeCookie分别是取COOKIE和设置COOKIE的函数