跨页面SESSION丢失问题
PHP的SESSION跨页面传递丢失的问题多发于linux服务器,windows比较少一些,linux会多一些文件权限的问题,昨天查了一下午的资料,做一下整理。
首先强调,$_SESSION一定要大写!!!!
确定PHP的SESSION是保存在文件中的。当然大家都知道PHP可以采用用户自定义处理方式进行处理以期达到跨主机共享的目的,这个我们今天不讨论。
session.save_handler = files
其次确保记录SESSION在服务器上的保存目录拥有可写的权限。我们在第一步已经指定了SESSION在服务器端以文件形式保存那么它在服务器上肯定就会写在一个文件中。我们要给这个目录足够的权限写入。
;session.save_path = “/tmp”(去掉前面的;并指定一个IIS进程用户拥有读写权限的目录)
第三 确保记录SESSIONID的COOKIES能够被页面得到,不至于每刷新一次SESSIONID就更换一个。这里主要涉及到两个配置,另外这里还隐含了另外一个问题,一个站点能够保存的COOKIES是有限的,所以当你的站点使用的COOKIES过多时候记录SESSIONID的COOKIES有可能被浏览器丢弃,这里就要求程序员最好将跨页面的变量尽量保存在SESSION传递。
session.cookie_path = /(能够读取到COOKIES的目录)
session.cookie_domain =(能够读取到COOKIES的域名,建议为空)
第四 保证记录SESSIONID的COOKIES不会被提前销毁,COOKIES是有存活时间的,在PHP的配置文件中同样也给出了默认的时间限制。
Lifetime in seconds of cookie or, if 0, until browser is restarted.
session.cookie_lifetime = 999999999
session.gc_maxlifetime = 999999999
session.cache_expire = 999999999
第五:php.ini中的session.use_trans_sid = 0或者编译时没有打开–enable-trans-sid选项
第六:不要在session_destroy();之后再给$_SESSION赋值,这样肯定会出错的。
如果下面的例子成功了,就ok了
s1.php
<?php
session_start();
$_SESSION[‘var1’]=”奋斗的菜鸟”;
$url=”<a href=”.”\”s2.php\”>下一页</a>”;
echo $url;
?>
s2.php
<?php
session_start();
echo “传递的session变量var1的值为:”.$_SESSION[‘var1’];
?>
运行以上代码,在客户端cookie正常的情况下,应该可以在得到结果“奋斗的菜鸟”。