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的开发框架的现状和展望
Mar 16 PHP
PHP下通过file_get_contents的代理使用方法
Feb 16 PHP
php处理json时中文问题的解决方法
Apr 12 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
Jun 14 PHP
解析argc argv在php中的应用
Jun 24 PHP
解析link_mysql的php版
Jun 30 PHP
ThinkPHP自动填充实现无限级分类的方法
Aug 22 PHP
php ImageMagick windows下安装教程
Jan 26 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
Mar 05 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
Mar 21 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
PDO::quote讲解
Jan 29 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函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
JavaScript中为元素加上name属性的方法
2011/05/09 Javascript
jQuery EasyUI API 中文文档 - ComboTree组合树
2011/10/11 Javascript
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
javascript实现移动端上的触屏拖拽功能
2016/03/04 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
原生JS查找元素的方法(推荐)
2016/11/22 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
详解10分钟学会vue滚动行为
2017/09/21 Javascript
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
Python中用Spark模块的使用教程
2015/04/13 Python
在Python中使用全局日志时需要注意的问题
2015/05/06 Python
python使用pycharm环境调用opencv库
2018/02/11 Python
python tornado微信开发入门代码
2018/08/24 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
Python3.5 Pandas模块缺失值处理和层次索引实例详解
2019/04/23 Python
python 随机森林算法及其优化详解
2019/07/11 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
浅谈keras中loss与val_loss的关系
2020/06/22 Python
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
北京SQL新华信咨询
2016/09/30 面试题
大学生毕业自我鉴定范文
2013/09/19 职场文书
生物科学专业职业规划书范文
2014/02/11 职场文书
小学先进集体事迹材料
2014/05/31 职场文书
六五普法学习心得体会
2016/01/21 职场文书
MySQL之select、distinct、limit的使用
2021/11/11 MySQL