PHP session跨页面访问失效问题处理

PHP session跨页面访问失效问题处理PHPsession跨页面访问失效问题处理环境问题说明php.ini部分配置检查目录权限检查session设置检查cookie设置环境使用了LNMP提供的环境,版本1.2.CentOS7.2PHP5.4Nginx1.1问题说明在使用session时,出现了本页面可读取刚设置好的session,跨页面获取不到的问题.测试后发现每次访问都会创建新的session_id().在…

环境

使用了 LNMP提供的环境,版本1.2.
CentOS 7.2
PHP 5.4
Nginx 1.1

问题说明

在使用session时,出现了本页面可读取刚设置好的session,跨页面获取不到的问题.测试后发现每次访问都会创建新的session_id().在没有跨域的情况下对配置进行逐项尝试

php.ini 部分配置

php session 此前的部分配置,把正确和错误的分为两类

;正常的部分
session.auto_start = 0
session.save_handler = files
session.name = PHPSESSID
session.cache_limiter = 
session.cache_expire = 180
;错误的部分
session.save_path = "/var/lib/php/session"
session.cookie_path = "/var/lib/php/session"
session.cookie_lifetime = 0
session.use_cookies = 0
session.use_only_cookies = 0
session.use_trans_sid = 0

检查目录权限

先检查目录权限,配置文件中的此目录权限可能有问题

session.save_path = "/var/lib/php/session"

为了排除问题,先把session文件保存目录改为有权限的目录.然后执行代码并给对应的session赋值.检查目录中有没有生成sess_开头的session文件,打开文件查看里面的值是否正确

session.save_path = "/tmp"

检查session设置

看论坛洪兽的文章解释了PHP.ini文件关于session配置cookie和URL传递方式,
链接:session跨页面失效

session的传递有两种方式,一种是基于cookie传递,另一种是基于URL传递。
cookie传递即通过cookie将session信息保存在客户端,之后在向服务器发送请求时会自动带上cookie信息,以便服务器读取。这是常用的方式。
URL传递是在点击跳转的链接后自动添加session信息,如a.php?sessid=…,之后在新页面自动$_GET[‘sessid’]来读取。这个过程是自动且隐藏的,跟用cookie传递一样不知不觉。

看文章后发现目前的配置方式错误,没有使用cookie方式也没有使用URL方式

session.use_cookies = 0
session.use_only_cookies = 0
session.use_trans_sid = 0

测试后发现URL传递PHPSESSID正常,但业务需使用cookie来存储session.将模式改为如下

session.use_cookies = 1
session.use_only_cookies = 1
session.use_trans_sid = 0

检查cookie设置

模式正常以后发现跨页面还是失效,于是检查服务端有没有发送Cookie到客户端
在session_start()后面增加代码将session发送到客户端,session正常使用,但删除此代码后session失效

session_start();
//手动发送session_id的cookie到客户端
setcookie('PHPSESSID', session_id(), time()+3156000);

使用PHP默认方式发现cookie中没有对应的PHPSESSID字段,但用PHP的setcookie()后有PHPSESSID字段.
于是查看Response Headers里的Set-Cookie信息

PHP默认发送的Set-Cookie值为

Set-Cookie:PHPSESSID=ldh2it7s9qa18c4lcrplsb4540; path=/var/lib/php/session

使用PHP的setcookie()方法后客户端收到的Set-Cookie为:

Set-Cookie:PHPSESSID=ldh2it7s9qa18c4lcrplsb4540; expires=Sat, 05-Jan-2019 16:17:20 GMT

检查cookie配置

session.cookie_lifetime = 0
session.cookie_path = "/var/lib/php/session"

修改为如下配置后,默认方式和手动设置的两者Set-Cookie一致,cookie中出现了PHPSESSID,session跨页面问题解决

session.cookie_lifetime = 1440
session.cookie_path = 

最后,将session方式改为兼容URL和cookie.正确的配置如下:

session.save_path = "/tmp"
session.cookie_path = 
session.cookie_lifetime = 1440
session.use_cookies = 1
session.use_only_cookies = 1
session.use_trans_sid = 1

参考文章列表

http://www.cnblogs.com/shoru/archive/2010/02/19/1669395.html
https://blog.csdn.net/pilipala6868/article/details/79402903
https://blog.csdn.net/koastal/article/details/52455057

今天的文章PHP session跨页面访问失效问题处理分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/13217.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注