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 相关文章推荐
10个可以简化php开发过程的MySQL工具
Apr 11 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
PHP 验证登陆类分享
Mar 13 PHP
php中define用法实例
Jul 30 PHP
Thinkphp无限级分类代码
Nov 11 PHP
php编译安装php-amq扩展简明教程
Jun 25 PHP
php使用curl实现ftp文件下载功能
May 16 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
May 29 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
Laravel多用户认证系统示例详解
Mar 13 PHP
Laravel中GraphQL接口请求频率实战记录
Sep 01 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的日期处理函数及uchome的function_coomon中日期处理函数的研究
2011/01/12 PHP
PHP取进制余数函数代码
2012/01/19 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
深入理解PHP中的empty和isset函数
2016/05/26 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
javascript中&quot;/&quot;运算符常见错误
2010/10/13 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
js函数调用的方式
2014/05/06 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
node.js调用C++开发的模块实例
2015/07/03 Javascript
javascript常用的方法整理
2015/08/20 Javascript
谈谈JavaScript类型系统之Math
2016/01/06 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
js canvas实现放大镜查看图片功能
2017/06/08 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
简述JS浏览器的三种弹窗
2018/07/15 Javascript
JavaScript防止全局变量污染的方法总结
2018/08/02 Javascript
深入理解NodeJS 多进程和集群
2018/10/17 NodeJs
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
Python headers请求头如何实现快速添加
2020/11/03 Python
python实现磁盘日志清理的示例
2020/11/05 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
测试工程师岗位职责
2013/11/28 职场文书
2013年员工自我评价范文
2013/12/27 职场文书
初一地理教学反思
2014/01/16 职场文书
商场总经理岗位职责
2014/02/03 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
大专生求职信
2014/06/29 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
十八大标语口号
2014/10/09 职场文书
旷工检讨书大全
2015/08/15 职场文书
班级管理经验交流材料
2015/11/02 职场文书
iPhone13将有八大升级
2021/04/15 数码科技