关于PHP页面跳转出现SESSION丢失问题
2012-11-15 21:05
337 查看
前两天晚上利用休息时间开发一个php项目,遇到了SESSION在php页面传输的问题。由于对php知识的淡忘,查阅了资料才得以解决。印象深刻,故作此文以备记录,仅供参考交流。当然,这种问题原因主要有三种,网上说的也很详细。在此,我只描述自己遇到的问题。
问题描述如下:
1、在登录页面login.php获得用户账号和密码之后,跳转至index.php,然后再index.php中创建SESSION,并将用户名或账号注册保存至SESSION变量中,如下:
@session_start();
$_SESSION['userID'] = $userID;
2、然后需要跳转至controller.php的时候传递$_SESSION['userID'] ,以供使用,如下:
<a href="controller.php?userID=<?php echo $_SESSION['userID'] ?>">前往</a>
3、这样一来当回到index.php的时候,检测$_SESSION['userID']是否存在,如果存在说明处于登录状态,如下:
@session_start();
if(isset($_SESSION['userID'])){//TODO}
实际上以上做法是无法实现登录状态的保存的。因为每个SESSION都有自己的一个SESSION_ID,这应该作为返回页面时识别和打开SESSION的标识。否则客户端根本无法找到此前注册的SESSION。因此,我们在一开始就应该获得并保存SESSION_ID,用来在页面跳转时作为传递参数之一。
解决方法如下:
1、在index.php创建SESSION的同时获得SESSION_ID,并保存,如下:
@session_start();
$sid = @session_id();
$_SESSION['userID'] = $userID;
2、然后需要跳转至controller.php的时候传递$_SESSION['userID'] 和SESSION_ID,以供使用,如下:
<a href="controller.php?userID=<?php echo $_SESSION['userID'] ?>&s=<?php echo $sid ?>">前往</a>
3、在跳转回index.php时应该传回SESSION_ID,如下:
<a href="index.php?PHPSESSIONID=<?php echo $sid ?>">返回</a>
4、这样一来当回到index.php的时候,检测$_SESSION['userID']是否存在,如果存在说明处于登录状态,如下:
@session_id($_GET['PHPSESSIONID']);
@session_start();
$sid = @session_id();
if(isset($_SESSION['userID'])){//TODO}
值得注意是index.php中的写法(以第4步为准)。每跳转至此页面中,都需要取得SESSION_ID一次,这样才能保证正确地启动session,否则就会出问题。
问题描述如下:
1、在登录页面login.php获得用户账号和密码之后,跳转至index.php,然后再index.php中创建SESSION,并将用户名或账号注册保存至SESSION变量中,如下:
@session_start();
$_SESSION['userID'] = $userID;
2、然后需要跳转至controller.php的时候传递$_SESSION['userID'] ,以供使用,如下:
<a href="controller.php?userID=<?php echo $_SESSION['userID'] ?>">前往</a>
3、这样一来当回到index.php的时候,检测$_SESSION['userID']是否存在,如果存在说明处于登录状态,如下:
@session_start();
if(isset($_SESSION['userID'])){//TODO}
实际上以上做法是无法实现登录状态的保存的。因为每个SESSION都有自己的一个SESSION_ID,这应该作为返回页面时识别和打开SESSION的标识。否则客户端根本无法找到此前注册的SESSION。因此,我们在一开始就应该获得并保存SESSION_ID,用来在页面跳转时作为传递参数之一。
解决方法如下:
1、在index.php创建SESSION的同时获得SESSION_ID,并保存,如下:
@session_start();
$sid = @session_id();
$_SESSION['userID'] = $userID;
2、然后需要跳转至controller.php的时候传递$_SESSION['userID'] 和SESSION_ID,以供使用,如下:
<a href="controller.php?userID=<?php echo $_SESSION['userID'] ?>&s=<?php echo $sid ?>">前往</a>
3、在跳转回index.php时应该传回SESSION_ID,如下:
<a href="index.php?PHPSESSIONID=<?php echo $sid ?>">返回</a>
4、这样一来当回到index.php的时候,检测$_SESSION['userID']是否存在,如果存在说明处于登录状态,如下:
@session_id($_GET['PHPSESSIONID']);
@session_start();
$sid = @session_id();
if(isset($_SESSION['userID'])){//TODO}
值得注意是index.php中的写法(以第4步为准)。每跳转至此页面中,都需要取得SESSION_ID一次,这样才能保证正确地启动session,否则就会出问题。
//END ICTwangbiao
相关文章推荐
- 关于thinkphp(或者PHP)session丢失或失效问题记录
- Asp.net页面跳转Session丢失问题
- php session跨页面传递 session值丢失问题之完美解决
- php session跨页面值丢失问题
- PHP的SESSION跨页面传递丢失的问题
- aspx在页面跳转(Response.Redirect)时丢失session问题及解决办法
- php页面跳转session cookie丢失,不能登录等问题解决方法
- 提交表单,跳转到PHP页面时出现乱码问题
- PHP关于IE下的iframe跨域导致session丢失问题解决方法
- 使用PHP header进行页面跳转出现的问题解疑
- 关于使用struts2时子窗体页面跳转后在父窗体打开的问题以及Session过期后的页面跳转问题
- PHP的SESSION跨页面传递丢失的问题
- php session跨页面传递 session值丢失问题之完美解决
- PHP关于session浏览器丢失的相关问题
- 关于用JavaScript获取session值并阻止页面跳转的问题
- php 跳转页面session丢失 session机制
- php session跨页面传递 session值丢失问题
- PHP关于IE下的iframe跨域导致session丢失问题解决方法
- PHP关于IE下的iframe跨域导致session丢失问题解决方法