如果session的存储管理是文件的话,就需要用点小技巧。由于session文件通常在运行中的时候是加了排它锁的,任何进程是无法直接删除它的,除非使用session_destroy()函数。
按照上面的思路,当一个用户登录时,我们先保存本次的new_session_id到临时变量中,然后查询此用户保存的上一次old_session_id, 然后将old_session_id打开获得控制权,再销毁它,销毁之后再重新打开new_session_id, 并保存起来。
代码如下:
$oldSid = getSidFromDb($user); session_start(); $current_session_id = session_id(); session_commit();//回写session到硬盘并释放文件锁 //将上一次session id销毁 session_id($oldSid); session_start(); session_destroy(); session_commit(); session_id($current_session_id); session_start(); $_SESSION['user'] = $user; session_commit(); saveSidInDb($user, $current_session_id);