通过两个会话启动更好地理解会话覆盖

时间:2009-08-14 03:34:08

标签: php session multidimensional-array

如何查看以下SESSION变量的指定值?

我在start_session()

之后运行以下内容
$_SESSION['login']['email'] = "ntohuh";

我使用print_r($_SESSION);

打印后得到
( [login] => Array ( [email] => )

此问题基于this thread

2 个答案:

答案 0 :(得分:1)

价值出现在我面前。这就是我所做的,如果有帮助的话:

# This empties $_SESSION
$_SESSION = array();

session_start();

$_SESSION['login']['email'] = "ntohuh";

echo '<pre>';
print_r($_SESSION);
echo '</pre>';

答案 1 :(得分:0)

回复this question

问题的根源

我发现问题出现在我的handle_login_session.php文件中,在我的index.php的最开头。我有那个

文件handle_login_session.php

中index.php的最开头部分
     if( $_SESSION['login']['logged_in'] == false ){
         $random_number = rand(1,100000);
         $session_id = session_id($random_number);
         $_SESSION['login']['email'] = '';               // problem here
 }

我不认为这可能是一个问题,因为我在文件的最后有以下内容

我的index.php在文件handle_registration.php

中结束
 $email = $_POST['login']['email'];     
 $_SESSION['login']['email'] = "ntohuh";               // not effective

我认为我的index.php中的代码将覆盖之前的代码。但是,这不是这种情况。

问题解释

我对这种奇怪的行为有一个解释。 后一个文件由我的index.php中的以下表单调用。

 <?php 
     echo ("<form method='post'" 
         . "action='/codes/handlers/handle_registration.php" // called here
         . "'>"
     ); 
 ?>
     <p>Email:                                                                                              
         <input name="login[email]" type="text" cols="92" />
     </p>
     <input type="submit" value="OK" />
 </form>

此操作似乎就像外部环境一样,不会覆盖主环境中的任何内容。

下图总结了显示被调用文件顺序的情况。

        handle_login_session.php ----        handler_registration ------
                                    |                                  |
 index.php ----------------------------------------------------------------------->
                                                                               time