PHP多个会话

时间:2015-09-28 10:44:10

标签: php session cookies session-variables session-timeout

为什么我在打印时只获得最后一个会话的输出?我需要为每个用户ID保存一个会话并发送密码重置电子邮件。当用户点击链接并更改密码时,我需要从服务器清除会话。

这就是我用PHP做的事情。

$res = array();
$uniqueId = uniqid();
echo $uniqueId . "<br>";

session_id($uniqueId);
session_start();
echo session_id() . "<br>";

$_SESSION['session_id'] = session_id();
$_SESSION['event_id'] = 'event1';
$_SESSION['user_id'] = 'user1';
$res[] = json_encode($_SESSION);

$uniqueId2 = uniqid();
echo $uniqueId2 . "<br>";
session_destroy();
session_id($uniqueId2);
session_start();
echo session_id() . "<br>";

$_SESSION['session_id'] = session_id();
$_SESSION['event_id'] = 'event2';
$_SESSION['user_id'] = 'user2';
$res[] = json_encode($_SESSION);

echo "<br>";
print_r($res);

print_r的输出:

Array ( 
    [0] => {"session_id":"5609187f586da","event_id":"event1","user_id":"user1"} 
    [1] => {"session_id":"5609187f588e1","event_id":"event2","user_id":"user2"} 
)

现在在新页面中,当我尝试这两个会话的每个事件ID时,我只获得最后一个会话的event_id,但不是两者。首先它说

Notice: Undefined index: event_id in C:\xampp\htdocs\test\test.php on line 12

这就是我在新页面中所做的事情。

$id1 = '560915a8c0875';
$id2 = '560915a8c0d51';
session_id($id1);
session_start();
echo $_SESSION['event_id'];

echo "<br>";

session_id($id2);
echo $_SESSION['event_id'];

这不可能用PHP或什么?

1 个答案:

答案 0 :(得分:1)

  

session_destroy()会销毁与当前会话关联的所有数据。它不会取消设置与会话关联的任何全局变量,也不会取消设置会话cookie。要再次使用会话变量,必须调用session_start()。   http://php.net/manual/en/function.session-destroy.php

在$ id1上调用session_destroy时,数据也将从服务器中清除,这意味着当您将会话ID定义为$ id1时,它将返回空会话。