跳转到另一个现有会话(使用php的默认会话处理程序)


Jump to another existing session (using PHP's default session handler)

我有这样一个场景:

UserJoe has session_id abc123 abc123存储在DB的users表UserJoe的行中。

UserJoe calls AdminBob and reports a problem.

AdminBob needs to experience UserJoe's problem first hand

所以,我想这样做:

01|  $sessionId = getSessionId("UserJoe");
02|  changeToExistingSession($sessionId);
03|  if($_SESSION["name"] == "UserJoe") echo "successfully changed users";

第02行是我有点卡住的地方…什么好主意吗?

(最好不要在任何地方使用session_save_path(): p)

编辑:这只是在页面执行期间。我想保持AdminBob的会话cookie完整

如果您将UserJoe的会话ID与报告一起存储在数据库中,那么我认为您可以使用session_id()AdminBob的会话ID设置为UserJoe的会话ID。

<?php
  if(!isset($_GET["id"]))
  {
    session_start();
    $_SESSION["foobar"] = $_GET["bar"];
    echo "Setting...";
    var_dump($_SESSION);
    var_dump($_COOKIE);
  }
  else
  {
    session_id($_GET["id"]);
    var_dump($_GET["id"]);
    var_dump($_COOKIE);
    session_start();
    var_dump($_SESSION);
  }
?>

测试:在一个浏览器中打开这个页面,设置bar为任意值。

index.php?bar=blahblahblah

重新打开浏览器,访问同一页面,但不设置bar,获取PHPSESSID的值并将其设置为id的值

index.php?id=[value of PHPSESSID]

您应该在新打开的浏览器中看到其他浏览器的会话