您的位置:首页 > 编程语言 > PHP开发

关于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,否则就会出问题。

//END ICTwangbiao



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: