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 相关文章推荐
新版mysql+apache+php Linux安装指南
Oct 09 PHP
PHP编程之高级技巧——利用Mysql函数
Oct 09 PHP
实现了一个PHP5的getter/setter基类的代码
Feb 25 PHP
对Session和Cookie的区分与解释
Mar 16 PHP
php在页面中调用fckeditor编辑器的方法
Jun 10 PHP
PHP数组实例总结与说明
Aug 23 PHP
基于php-fpm的配置详解
Jun 03 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
Dec 21 PHP
php利用header函数下载各种文件
Aug 24 PHP
Joomla框架实现字符串截取的方法示例
Jul 18 PHP
php框架CodeIgniter使用redis的方法分析
Apr 13 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
动态生成gif格式的图像要注意?
2006/10/09 PHP
php获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
2016/03/23 PHP
php读取本地json文件的实例
2018/03/07 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
JS实现浏览器菜单命令
2006/09/05 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
js实现StringBuffer的简单实例
2016/09/02 Javascript
js canvas实现QQ拨打电话特效
2017/05/10 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
python选择排序算法实例总结
2015/07/01 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
利用python写个下载teahour音频的小脚本
2017/05/08 Python
python 获取字符串MD5值方法
2018/05/29 Python
使用sklearn之LabelEncoder将Label标准化的方法
2018/07/11 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
2019/06/27 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
django-csrf使用和禁用方式
2020/03/13 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
boostrap modal 闪现问题的解决方法
2020/09/01 HTML / CSS
会计电算化专业自荐信
2014/03/15 职场文书
会展策划与管理专业求职信
2014/06/09 职场文书
2015年社区文体活动总结
2015/03/25 职场文书
敬老院义诊活动总结
2015/05/07 职场文书
董事会决议范本
2015/07/01 职场文书
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript