博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP中SESSION丢失(不能跨页面传递)解决办法
阅读量:6641 次
发布时间:2019-06-25

本文共 1267 字,大约阅读时间需要 4 分钟。

PHP中SESSION丢失(不能跨页面传递)解决办法

一般来说,使SESSION丢失有以下几点:

1、客户端禁用了cookie

2、浏览器无法存取cookie

3、php.ini中的session.use_trans_sid=0或编译时没有打开–enable-trans-sid选项

Session储存于服务器端(默认以文件方式存储),根据客户端提供的session id来得到用户的文件,

取得变量的值,session id可以使用客户端的Cookie或者Http1.1协议的Query_String

(就是访问的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_start();

之前加代码session_id($session id);将不产生新的session文件,

直接读取与这个id对应的session文件。

PHP中的session在默认情况下是使用客户端的Cookie来保存session id的,

所以当客户端的cookie出现问题的时候就会影响session了。必须注意的是:

session不一定必须依赖cookie,这也是session相比cookie的高明之处。

当客户端的Cookie被禁用或出现问题时,PHP会自动把session id附着在URL中,

这样再通过session id就能跨页使用session变量了。但这种附着也是有一定条件的,

即“php.ini中的session.use_trans_sid = 1或者编译时打开打开了–enable-trans-sid选项”。

明白了以上的道理,现在我们来抛开cookie使用session,主要途径有三条:

1、设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了–enable-trans-sid选项,

让PHP自动跨页传递session id。

2、手动通过URL传值、隐藏表单传递session id。

3、用文件、数据库等形式保存session_id,在跨页过程中手动调用。

      本文转自许琴 51CTO博客,原文链接http://blog.51cto.com/xuqin/1202672:,如需转载请自行联系原作者
你可能感兴趣的文章
Aizu 2300 Calender Colors(暴力)
查看>>
$rootScope
查看>>
Asp.net core 学习笔记 ( DI 依赖注入 )
查看>>
Asp.net core 学习笔记 ( Azure key-vault )
查看>>
[转载] 杜拉拉升职记——17 招人难,求职也难
查看>>
cas系列-cas登出(四)
查看>>
Java练习 SDUT-1149_计算题
查看>>
运行shell脚本的三种方式
查看>>
Java I/O总结
查看>>
学习笔记之scikit-learn
查看>>
用java集合模拟登录和注册功能
查看>>
安装CPqD/ofdissector遭遇的错误
查看>>
C++ 顺序容器
查看>>
Linux下安装ElasticSearch 5 和配置外部访问
查看>>
微信授权登录
查看>>
去除多余样式
查看>>
NuGet Package Explorer使用教程下载
查看>>
还有5个月就NOIP2019了,我干了什么
查看>>
(转)linux下和云端通讯的例程, ubuntu和openwrt下实验成功(二)
查看>>
hdu2707
查看>>