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

  • 环境
  • 问题说明
    • php.ini 部分配置
      • 检查目录权限
      • 检查session设置
      • 检查cookie设置
  • 参考文章列表

环境

使用了 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跨页面访问失效问题处理相关推荐

  1. 跨页面访问ViewState

    跨页面访问ViewState仅仅适用于通过Post方法或者Server.Transfer方法从一个页面重定向到另一个页面的情况,如果你使用Response.redirect方法将无法实现跨页面访问Vi ...

  2. session在html页面跳转,session跨页面传值为空

    PHP中的SESSION页面间传值的问题 a.php 代码 @session_start(); $_SESSION['username']=$row['username']a.php 代码 跳转 b. ...

  3. php Session 跨页面就读不出来怎么办呢

    a.php <?php session_start(); //设置一个session值 $_SESSION["name"] = "Hello"; 然后跳转 ...

  4. 用P3P header解决IE下iframe跨域访问时候session丢失的问题

    用P3P header解决IE下iframe跨域访问时候session丢失的问题 整合客户的登录时,或者其他一个网站通过iframe时,特别是一个http页面,访问一个https页面时,常常会sess ...

  5. URL、Session、Cookies、Server.Transfer、Application和跨页面传送。

    URL.Session.Cookies.Server.Transfer.Application和跨页面传送. [分析] 本题考查面试者对ASP.NET中多页面传值的理解是否全面.因为ASP.NET的页 ...

  6. html的页面怎样直接跨域访问,【HTML】iframe跨域访问问题

    概述 本地同一浏览器访问本地HTML文件和访问服务器端HTML文件,本地Iframe没有自适应高度,而服务器端的Ifrane自适应了高度. 1.问题重现: Chrome 版本 41.0.2272.10 ...

  7. 新蜂商城(newbee-mall-api)部分接口实验,跨域处理(同源策略,跨域访问,CORS),系统安全问题(Session,Cookie,Token,OAuth)(软件工程综合实践课程第十三周)

    文章目录 一.要求 二.知识总结 跨域处理 1.同源策略 1.1 浏览器的同源策略 1.2 跨域请求实验 2 跨域访问 2.1 添加响应头来处理跨域 2.1.1 CORS 跨域资源共享 2.1.2 设 ...

  8. 跨站访问如何保证session的正常使用

    1.最近公司开发了一个网站项目,一切顺利.由于网页没有兼容手机浏览器,后来添加了一个webapp端,独立于另一个站点,用于解决兼容手机浏览器的问题.其中webapp端的数据全部通过ajax进行请求另一 ...

  9. 实现IHttpModule接口获取Session来实现页面访问日志功能。

    我们在开发企业Web应用程序时经常需要对用户的操作记录日志,以便在发生突发事件后有据可查,比如要对用户访问的每一个页面都做日志记录.通常的做法可能是编写一个记录日志的方法(如:AddAccessLog ...

最新文章

  1. 手摇计算机教程视频,使用手摇计算机的照片
  2. Java 使用 URLConnection 模拟 Http Get和Post 提交
  3. AI:2020年6月21日北京智源大会演讲分享之20:00-21:00邱锡鹏教授《如何学习深度学习》
  4. 冒险实施SAP HANA 农夫山泉缘何做第一个“吃螃蟹”者?
  5. MySQL Study之--Percona Server版本
  6. Eclipse RCP 中使用UTF8编码出现乱码问题的解决办法
  7. .md是什么文件_Element-UI源码阅读之md显示到页面
  8. 程序架构--BS,CS
  9. 面向非易失性内存的持久索引数据结构研究综述
  10. kotlin读取sd卡里的文件_如何在Kotlin中写入文件?
  11. namenode开启DEBUG
  12. 升级思科WLC firmware详细步骤
  13. 这样找电子书,方法贴!
  14. Centos7 安装字体库中文字体
  15. Spring Cloud微服务实战_PDF电子书下载 高清 带索引书签目录_翟永超(著)
  16. 模式识别与智能系统和计算机视觉,模式识别与智能系统(论文).docx
  17. Oracle11g64位安装教程
  18. vscode 连接ubuntu显示“试图写入的管道不存在”
  19. Unity3D消耗CPU过高解决办法
  20. 理解Anchor、RPN真值与预测量、RPN卷积网络

热门文章

  1. java 字符串所在位置_java 查找字符串所在的位置
  2. 移位法实现单片机I/O口输出控制8个LED灯循环点亮。
  3. Element-ui中 实现多选表格(Table)增加 ‘全选’ 字样
  4. matlab中scatter函数用法
  5. 2022年注册会计师(CPA)考试精选复习题及答案
  6. Java程序设计 图形用户界面 【十二】下拉列表JComboBox
  7. 01背包,恰好装满(劲歌金曲,uva 12563)
  8. 小学六年级 计算机演讲稿,小学六年级毕业的演讲稿(通用5篇)
  9. 吃鸡服务器维护6月23日,4月23日吃鸡更新 | 手游网游页游攻略大全
  10. 带id跳转页面,另一个页面拿id