PHP的SESSION跨页面传递丢失的问题
网络整理 - 08-26
近来有网友问我PHP的SESSION跨页面传递丢失的问题。在这里总结一下PHP的SESSION跨页面传递问题的解决方案。注意我们下面涉及到的配置均位于PHP.ini 文件,这个文件在WINDOWS下位于C:\WINDOWS\php.ini 可以用UltraEdit将其打开并逐个检索定位。
首先 确定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
经过以上四步的配置基本上就没问题了,但是页面的调用时候同样可能会出现问题。
在PHP5中建议使用 session_start(); 来开启回话而后SESSION变量统一放置在 $_SESSION 变量中使用方法无异与普通变量。