我所说的传递是指新打开一个浏览器窗口转递,而不是在原窗口打开新页面的传递,原窗口打开新页面时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的函数