PHP SESSION跨页面传递失败解决方案


Posted in PHP onDecember 11, 2020

今天想用一个session来实现用户登录判断,也算是对之前session的探究,查了下资料session的运行机制如下:

session是服务器端的一种会话机制,当客户端的请求服务器创建一个session时,服务器会先检测该请求里面是否包含一个惟一的 sessionID,如果是,说明服务器已经为该用户创建过session,只要按照该sesionID检索出该用户的session供用户使用,如果没 有sessionID,服务器会为该用户新建一个带有唯一表示服sessionID的session。创建完成后,该sessionID会被服务器返回给 客户端,保存到客户端本地。

一般保存该session ID的机制是Cookie,但是由于Cookies可以被人为禁止,这就得保证Cookies被禁止之后,仍旧可以通过session进行会话,一般是通过url重写进行,表 现形式为http://...../xxx;jsessionid= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764,另一种是作为查询 字符串附加在URL后面,表现形式为http://..... /xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 这两种方式对于用户来说是没有区别的,只是服务器在解析的时候处理的方式不同,采用第一种方式也有利于把session id的信息和正常程序参数区分开来。

为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。

另外是关于session失效的误区:

在谈论session机制的时候,常常听到这样一种误解“只要关闭浏览器,session就消失了”。其实可以想象一下会员卡的例子,除非顾客主动 对店家提出销卡,否则店家绝对不会轻易删除顾客的资料。

对session来说也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个 session id就消失了,再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的 HTTP请求头,把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的session。

恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间。

好了,废话说了一大堆,说session丢失的解决办法吧:

1、session_start();应该尽量放置到页面的顶部;

2、如果php.ini里面没有配置 session Autostart的话,每次会话之前,都得手动开启session:session_start();

3、session是php里面的超全局变量,跟$_GET,$_POST,$_SERVER一样,所以使用的时候必须大写:$_SESSION['username']=$username;

4、跨页面传递示例:a.php页面传递$_SESSION['username']到b.php:

a.php:

<?php
session_start();
$username=$_POST['username'];
$_SESSION['username']=$username;
?>

b.php:

<?php
session_start();
echo $_SESSION['username'];
?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP数据库操作面向对象的优点
Oct 09 PHP
Gregarius中文日期格式问题解决办法
Apr 22 PHP
基于OpenCV的PHP图像人脸识别技术
Oct 11 PHP
PHP JSON格式数据交互实例代码详解
Jan 13 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
Feb 21 PHP
destoon找回管理员密码的方法
Jun 21 PHP
php+ajax实现无刷新分页
Nov 18 PHP
WordPress分页伪静态加html后缀
Jun 08 PHP
php设计模式之单例模式代码
Jun 11 PHP
浅谈PHP中关于foreach使用引用变量的坑
Nov 14 PHP
PHP实现的抓取小说网站内容功能示例
Jun 27 PHP
Yii 框架使用数据库(databases)的方法示例
May 19 PHP
PHP生成随机密码4种方法及性能对比
Dec 11 #PHP
通过代码实例解析PHP session工作原理
Dec 11 #PHP
深入解析PHP底层机制及相关原理
Dec 11 #PHP
基于PHP实现发微博动态代码实例
Dec 11 #PHP
PHP isset empty函数相关面试题及解析
Dec 11 #PHP
PHP数组实际占用内存大小原理解析
Dec 11 #PHP
PHP基于ip2long实现IP转换整形
Dec 11 #PHP
You might like
php下实现折线图效果的代码
2007/04/28 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
学习YUI.Ext 第七天--关于View&amp;JSONView
2007/03/10 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
基于vue配置axios的方法步骤
2017/11/09 Javascript
cropper js基于vue的图片裁剪上传功能的实现代码
2018/03/01 Javascript
vue webpack打包后图片路径错误的完美解决方法
2018/12/07 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
Node.js API详解之 zlib模块用法分析
2020/05/19 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
原生JavaScript实现五子棋游戏
2020/11/09 Javascript
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
Python生成随机密码的方法
2017/06/16 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
Python常见数据类型转换操作示例
2019/05/08 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
物流合作计划书
2014/01/10 职场文书
销售团队口号大全
2014/06/06 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
甲午大海战观后感
2015/06/02 职场文书
教师读书笔记
2015/06/29 职场文书
2019年度行政文员工作计划范本!
2019/07/04 职场文书
Golang 结构体数据集合
2022/04/22 Golang