函数session_destroy kills / doent杀死会话数组

时间:2013-12-29 19:38:18

标签: php session

这里有3个PHP脚本: 我设置会话的第一个文件:

<?php session_start(); // store session data
$_SESSION["username"] = "joshmathews" ;
$_SESSION["name"] = "josh" ; ?> 

第二个脚本,我首先输出代码,然后销毁会话,然后再次启动会话:

<?php session_start(); 
echo "<br>Username = " . $_SESSION["username"];
echo "<br> name= " . $_SESSION["name"] ;
echo "<br>" . session_id() ; 
//session_id(200) ; //
 session_destroy() ; 
echo "<br>Username = " . $_SESSION["username"]; 
echo "<br> name= " . $_SESSION["name"] ; 
echo "<br>" .session_id() ;

我只输出会话数组的第三个脚本:

<?php 
session_start() ; 
echo $_SESSION['name'] ; 
echo "<br>" . session_id() ; ?> 

现在在第二个脚本中如果我包含我更改会话ID的行我仍然可以访问第三个代码中的会话数组但是如果我排除会话ID的更改那么我就不能在第三个脚本中访问会话数组码。为什么??????

2 个答案:

答案 0 :(得分:2)

因为当您致电session_id(200)时 - 它正在将您当前的会话更改为另一个会话,并且您正在销毁新创建的会话。

在此处阅读更多内容:http://www.php.net/manual/en/function.session-id.php

  

如果指定了id,它将替换当前的会话ID。 session_id()需要在session_start()之前为此目的调用

答案 1 :(得分:0)

session_id()需要在session_start()之前调用,以便正确设置ID。

请参阅manual for session_id()。在参数$id下,它说明了这一点。

  

如果指定了id,它将替换当前的会话ID。 session_id()需要   为此目的在session_start()之前调用。

同样在设置$id时,您应该将其作为字符串传递以实现一致性:

session_id('200');