php session跨页面传递 session值丢失问题之完美解决

  今天想用一个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‘];
?>
时间: 2024-10-31 05:04:44

php session跨页面传递 session值丢失问题之完美解决的相关文章

php 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 SESSION 不能跨页面传递

今天想用一个session来实现用户登录判断,也算是对之前session的探究,查了下资料session的运行机制如下: session是服务器端的一种会话机制,当客户端的请求服务器创建一个session时,服务器会先检测该请求里面是否包含一个惟一的 sessionID,如果是,说明服务器已经为该用户创建过session,只要按照该sesionID检索出该用户的session供用户使用,如果没 有sessionID,服务器会为该用户新建一个带有唯一表示服sessionID的session.创建完

springmvc 在前端jsp页面,select标签显示复合条件。和 session跨页面操作。

在jsp的select标签中,显示一个级联且带有复合查询的结果的select标签. 方法是,在这个类中,定义一个字段,extend,然后把他的get属性,重写为需要的业务 如下 private String extend; public String getExtend() { return this.zhouyiIndex.getName() + "卦 "+this.yaoId+"爻:"+this.yaoContent.substring(0,this.yaoCo

新LNMP环境,但是SESSION跨页面或者刷新 session丢失

唠叨:本地WAMP做了一个微信项目,一切OK,昨天需要在LINUX架设一套LNMP环境.但是,在架设代码的时候,登录总是不成功~~~ 最终解决:权限 其实,作为一个程序猿,只要涉及到服务器内容,都应该非常了解权限的问题.但是,如何正确的配置权限,或者那个位置没有配置到权限,才是比较苦恼的.(所有文件夹,给予所有权限的忽略…………) 下面详细说下我的环境部署: 请注明出处,珍惜我们自己的劳动成功~谢谢...http://www.cnblogs.com/Mwsoft/p/4806741.html 1

Gatling - 用 session 实现关联 传递 token 值

项目中的某个接口必须先登录后调用,但是 header 中的Authorization 需要在登录返回的token中添加一个字串,所以需要先获得 token 并修改后传递给该接口的请求. 虽然这是常见的关联的问题,但是由于刚开始研究gatling, 苦于中文相关文档有限,看了官方文档,也是有些茫然,尝试了不同的方法后,终于看到请求成功了. package advisorApp import io.gatling.core.Predef._import io.gatling.http.Predef.

【2017-05-21】WebForm跨页面传值取值、C#服务端跳转页面、 Button的OnClientClick属性、Js中getAttribute和超链接点击弹出警示框。

一.跨页面传值和取值: 1.QueryString - url传值,地址传值 优缺点:不占用服务器内存:保密性差,传递长度有限. 通过跳转页面路径进行传值,方式: href="地址?key=value&key=value"            用&可以实现传递多个值. 通过这种方式就把要传递的值传到要跳转的页面去了. 2.跨页面取值: 在跳转到的页面的C#代码服务端进行取值 用:  string value = Request["key"]; 二.

WebForm复合控件、跨页面传值取值、C#服务端跳转页面

1.RadioButtonList     单选集合 -属性:RepeatDirection:Vertical (垂直排布)/Horizontal (横向排布) RepeatLayout:Table (表格排布方式)/Flow (span排布方式) RepeatColumns:         设置为多少列. 每一个单选按钮都是一个ListItem对象,他有  Enable(是否可用).  selected(默认选中)  Text(显示的文本) Value(隐藏的值)属性 赋值:两种数据绑定方法

js代码中嵌套jsp页面传递的值引起的安全问题

在jsp相互间传值,我们经常用string str=request.getParameter("st");这种方式来获取值,然后再在js代码中引入 var str=<% str%> 这么写会有安全问题,用fortify软件就能测出问题.提示跨域安全问题,其实不跨域也可以解决这种问题,把变量放到request域中,用el表达式来获取 这么写: string str=request.getParameter("st");request.setAttribut

小程序跨页面传递data数据的三种方法

Q:小程序怎么把页面data里的数据传到另外的页面? 或者小程序怎么吧表单里的数据传到另外的页面?A:1.可以使用url传递数据. 例如在A页面中传递数据,需要注意的是,wx.switchTab中的url不能传参数. wx.navigateTo({url:‘../pageB/pageB?name=raymond&gender=male’}).在B页面中接收数据,通过onLoad的option:Page({onLoad:function(option){console.log(option.nam