【问题标题】:PHP multiple sessionsPHP 多个会话
【发布时间】:2015-09-28 19:15:33
【问题描述】:

为什么我在打印时只得到最后一个会话的输出?我需要为每个用户 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 还是什么?

【问题讨论】:

  • 您在新页面中做什么?也请分享..
  • 你到底想在这里实现什么?如果这是为了保护您的密码重置端点——应该通过生成一个随机令牌来完成,该令牌将存储到数据库中。为此使用会话不是一个好方法(尤其不是您现在尝试这样做的方式。)
  • 一个会话可能在用户检查他们的电子邮件时已经过期,如果他们从另一台设备检查他们的电子邮件,cookie 也可能毫无意义。执行此操作的常用方法是随机令牌,将其存储到数据库中。如果您因为没有使用数据库而不想这样做,您还可以使用一些明文参数的组合(例如用户的电子邮件地址、他们请求重置密码的时间等)。 ),以及这些参数的哈希值和一个秘密。这样,您可以通过再次计算哈希来检查参数是否真实。
  • 您必须更改 PHP 清除旧会话数据的设置。但同样,为什么你坚持使用会话来做到这一点?它们不是这项工作的正确工具。
  • 那么是什么让您认为它适合这项工作的工具......?每当您认为必须在一个 PHP 脚本实例中处理多个会话时,这表明您可能正在做一些没有意义的事情。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多