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 分页原理详解
Aug 21 PHP
简单PHP上传图片、删除图片实现代码
May 12 PHP
php中switch与ifelse的效率区别及适用情况分析
Feb 12 PHP
php判断当前操作系统类型
Oct 28 PHP
9个比较实用的php代码片段
Mar 15 PHP
php中让人头疼的浮点数运算分析
Oct 10 PHP
PHP中empty,isset,is_null用法和区别
Feb 19 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
Mar 12 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
May 23 PHP
PHP中实现中文字串截取无乱码的解决方法
May 29 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
Oct 08 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
操作Oracle的php类
2006/10/09 PHP
php替换超长文本中的特殊字符的函数代码
2012/05/22 PHP
一个经典的PHP验证码类分享
2014/11/18 PHP
如何通过Linux命令行使用和运行PHP脚本
2015/07/29 PHP
php实现倒计时效果
2015/12/19 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
判断及设置浏览器全屏模式
2014/04/20 Javascript
Javascript闭包用法实例分析
2015/01/23 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
点击按钮弹出模态框的一系列操作代码实例
2019/03/29 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
python迭代dict的key和value的方法
2018/07/06 Python
python十进制和二进制的转换方法(含浮点数)
2018/07/07 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
2018/07/11 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
移动端html5模拟长按事件的实现方法
2018/09/30 HTML / CSS
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
大学生职业生涯规划书模板
2014/01/18 职场文书
环保建议书100字
2014/05/14 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
责任书范本大全
2015/05/11 职场文书
学生退学证明
2015/06/23 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python