我一直在寻找在我一直在开发的登录类中使用session_regenerate_id,并且从阅读PHP文档和其他一些网站看来它创建了一个新会话,其中新生成的ID包含以前的数据该函数已在PHP 4.3.2中添加。
从PHP 5.1开始,它有一个delete_old_session参数,如果设置为true,它也会破坏前一个会话,但在之前的版本中它不会。
我的问题是,如果我在运行PHP版本低于5.1的服务器上使用session_regenerate_id,那么使用session_regenerate_id和销毁上一个会话的最佳方法是什么?
我认为session_destroy()不会起作用,因为如果我在session_regenerate_id之前使用它,那么它将无法携带先前的会话数据,如果在它之后使用它只会破坏新会话。
答案 0 :(得分: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。