PHP使用session控制同一个账户单设备登陆

Posted 依然范儿特西

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP使用session控制同一个账户单设备登陆相关的知识,希望对你有一定的参考价值。

首先使用一个浏览器来访问应用的一个页面 multex_session1.php

要记录当前账号所使用的sessionId,使用session_id()获取到当前的sessionId

然后用另一个浏览器和同一个账号访问另一个页面 multex_session2.php

在该页面中会找到该账号之前使用的sessionId,然后清除该sessionId保存的所有内容,然后重新写入session值,并将新的sessionId写入redis中

清除旧的sessionId使用的方法有 session_start()????? ?session_unset() ? session_write_close()

具体代码:multex_session1.php

<?php
    
    $redis = new Redis();
    $redis->connect('192.168.1.102',6379);
    session_start();
    $curSessionId = session_id();
    echo 'sessionId='.$curSessionId.'<br/>';
    $userSession = $redis->get('online:1');
    echo "userSession:{$userSession},user_id:{$_SESSION['user_id']},user_name:{$_SESSION['user_name']}";
 
    $_SESSION['user_id'] = 1;
    $_SESSION['user_name'] = 'areyouok';
 
    $redis->set('online:1', $curSessionId);
    $redis->expire('online:1', 1800);
    session_write_close();

multex_session2.php

<?php
    session_start();
    $curSessionId = session_id();
    echo 'sessionId='.$curSessionId.'<br/>';
    session_write_close();
 
    $redis = new Redis();
    $redis->connect('192.168.1.102',6379);
    $oldSession = $redis->get('online:1');
    if (!empty($oldSession) && !empty($curSessionId) && $curSessionId != $oldSession) {
        echo 'oldSession not equal new sessionId<br/>';
        $redis->set('online:1', $curSessionId);
        $redis->expire('online:1', 1800);
 
        session_id($oldSession);
        session_start();
        if (ini_get("session.use_cookies")) {
            $params = session_get_cookie_params();
            echo 'arrive here,'.json_encode($params).'<br/>';
            setcookie(session_name(), '', time() - 42000,
                $params["path"], $params["domain"],
                $params["secure"], $params["httponly"]
            );
        }
        unset($_SESSION['user_id']);
        unset($_SESSION['user_name']);
        session_unset();
        session_write_close();
    
        session_id($curSessionId);
        session_start();    
        echo "oldSession:{$oldSession},user_id:{$_SESSION['user_id']},user_name:{$_SESSION['user_name']}";
        $_SESSION['user_id'] = 1;
        $_SESSION['user_name'] = 'areyouok';    
        session_write_close();
    }

以上是关于PHP使用session控制同一个账户单设备登陆的主要内容,如果未能解决你的问题,请参考以下文章

php中怎么用session来控制页面的访问权限?

php中怎么用session来控制页面的访问权限?

利用session+application+cookie 实现单态登陆,且解决浏览器意外关闭的问题

php中如何使用session 来实现在一个页面登陆后才能访问另外一个页面

会话控制

怎么监控局域网登陆的域账户?(局域网部署域控)