首页 PHP 正文
497

php中如何实现单点登录

如果session的存储管理机制是db, memcache, redis等,那么实现单点登录就很简单,只需要将用户以前的session_id对应的记录全部删除即可。

如果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);

正在加载评论...