更改会话ID并保留数据?

Veg*_*sen 6 php session

当用户登录我们的网站时,我想更改会话ID,但保留会话中的任何数据.我想这样做有两个原因:

  1. 防止用户帐户同时在多个地方使用(因为如果两个人使用同一个帐户,一个人的行为将破坏另一个人的行为).
  2. 让用户继续他/她在另一台计算机上所做的事情(例如,从家用计算机移动到工作).

这些可能看起来很矛盾,但如果你认真考虑的话,实际上并非如此.

问题如下; 要获取当前在会话中的数据,我必须打电话session_start().这意味着我session_id()之后无法调用来设置新的会话ID.任何想法如何传输会话数据和更改会话ID.

更新:我需要能够自己选择会话ID.session_regenerate_id()因此不会奏效.

cle*_*tus 13

您可以使用session_regenerate_id():

<?php
session_start();

$old_sessionid = session_id();

session_regenerate_id();

$new_sessionid = session_id();

echo "Old Session: $old_sessionid<br />";
echo "New Session: $new_sessionid<br />";

print_r($_SESSION);
?>
Run Code Online (Sandbox Code Playgroud)

甚至更粗糙的方法可能有效:

// save the session
session_start();
$session = array();
foreach ($_SESSION as $k => $v) {
  $session[$k] = $v;
}
session_commit();

// create new session and copy variables
session_id("new session id");
session_start();
foreach ($session as $k => $v) {
  $_SESSION[$k] = $v;
}
Run Code Online (Sandbox Code Playgroud)