0

我一直在研究在我一直在开发的登录类中使用 session_regenerate_id,并且从阅读 PHP 文档和其他一些站点来看,它似乎创建了一个新会话,其中新生成的 ID 携带了以前的数据,因为该函数是在 PHP 4.3.2 中添加。

从 PHP 5.1 开始,它有一个 delete_old_session 参数,如果设置为 true,它也会破坏之前的会话,但在之前的版本中不会。

我的问题是,如果我要在运行低于 5.1 的 PHP 版本的服务器上使用 session_regenerate_id,那么使用 session_regenerate_id 并销毁前一个会话的最佳方法是什么?

我不认为 session_destroy() 会起作用,因为如果我在 session_regenerate_id 之前使用它,那么它将无法携带以前的会话数据,如果在它之后使用它只会破坏新会话。

4

1 回答 1

1

这应该可以解决您的问题:

session_start();
// gets current (previous) session
$previousID = session_id();
session_regenerate_id();
// get the new session id
$newID = session_id();
// close session related files
session_write_close();

// set the old session id
session_id($previousID);
// start the old session
session_start();
// clear the old session
session_destroy();
// save the old session state (destroyed session)
session_write_close();

// set the regenerated session id
session_id($newID);
// start the new session
session_start();

现在您的旧会话数据将被删除并转移到新的会话 ID。

于 2012-06-14T11:41:40.090 回答