PHP session跨页面访问失效问题处理
PHP session跨页面访问失效问题处理
环境
使用了 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
参考文章列表
https://www.geek-share.com/detail/2477563280.html
https://www.geek-share.com/detail/2730811401.html
https://www.geek-share.com/detail/2684178170.html
- Session失效以及页面访问权限的处理方法
- 卡巴斯基阻止msxml6.dll导致php开发中页面访问很慢的问题
- PHP的SESSION跨页面传递丢失的问题
- JAVA Web 安全机制----使用filter验证session用户和页面缓存问题处理
- PHP的SESSION跨页面传递丢失的问题
- PHP调用session_start后页面始终加载的问题研究
- centos7 安装nginx和php5.6.25遇到 无法访问php页面 报错file not found 问题解决
- mvc ajax访问后台时session过期无法跳转到Login页面问题解决
- JAVA Web 安全机制----使用filter验证session用户和页面缓存问题处理
- ASP.NET一般处理程序访问Session问题
- php session 跨页失效问题
- .net 自由切换http和https请求页面,含带处理css和js切换时失效问题
- session失效时,解决登录页面嵌套框架问题
- 使用Ajax时处理用户session失效的问题
- Session失效,从IFRAME跳转到别的页面问题
- Session失效,从IFRAME跳转到别的页面问题
- PHP限制页面只允许微信自带浏览器访问的处理方法
- 当session长时间不登录失效问题,再重登录出现两个嵌套登录页面
- PHP中使用asort进行中文排序失效的问题处理
- PHP教程之PHP调用session_start后页面始终加载的问题研究