SESSION跨页传递问题

来源:互联网 发布:日系大衣知乎 编辑:程序博客网 时间:2024/06/07 12:15

首先,我们要了解,在什么状态下SESSION中的会话变量不能跨页传递。情况有三:①客户端禁用了COOKIE;②在php.ini中设置了session.use_trans_sid=0或者在编译前没有开启--enable-trans-sid选项;③浏览器出现故障,暂时无法读写COOKIE文件。

造成SESSION变量无法跨页进行传递,其原因在于SESSION储存于服务器端(默认以文件方式存储内容),根据客户端提供的session id来得到用户的文件,取得变量的值,session id可以使用客户端的Cookie或者通过HTTP协议中的URL来传达给服务器,然后服务器通过读取存储Session的目录进行变量的读取。也就是说,session id是取得存储在服务器上的SESSION变量的唯一标识。

当函数session_start()运行时,在服务器上创建一个Session文件,随之也产生了与之唯一对应的一个session id,定义Session变量以一定形式存储在已创建的Session文件中。通过session id,可以取出定义的变量。跨页后,为了使用Session,程序再次执行session _start();这将会再产生一个新的Session文件,也会与之对应产生一个新的session id,用这个session id是无法获取第一个SESSION文件中的变量的,因为这个session id并不是一个页面上的session id。如果在session_start()函数执行前添加代码session_id($session_id),将不会产生新的SESSION文件,直接读取与这个session id对应的SESSION文件。

解决无法跨页传递会话变量,通常有以下几种方法:①设置php.ini中的session.use_trans_sid=1(windows下)或者编译时选择--enable-trans-sid选项(*nix下),让PHP可以自动跨页传递session id;②自定义脚本手动通过URL传值、隐藏表单传递session id;③以外部文件或数据库的形式对session id 进行存储,每次跨页访问时进行手动调用。

0 0
原创粉丝点击