php – 使用$_SESSION超全局获取当前在线用户并将其重新设置回当前会话数据是否很难?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 使用$_SESSION超全局获取当前在线用户并将其重新设置回当前会话数据是否很难?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用数据库来存储会话数据.我创建了一些函数来通过当前活动会话进行查询,并返回一些要在当前页面上使用的值.使用单个查询就可以轻松获得打开会话的数量
    “从UserSessions中选择SessionData”
并返回查询返回的行数.

然后,我想确定哪些网站用户目前处于“在线”状态.会话存储正在查看网站的用户的UserID.我搜索搜索,似乎只找到session_decode函数来解码似乎是序列化数据(但反序列化不起作用).这里唯一的问题是,session_decode会自动填充$_SESSION超全局.所以我的问题是,暂时存储$_SESSION数据是否“不好”,对当前在线的每个用户使用session_decode,然后将$_SESSION变量重置为临时存储的数据?

function getLOGgedInUsers() {
            //NEED SOME ERROR HANDLING AROUND DB STUFF
    $oConn = DB::connect(RF_DSN);

    $oPRep = $oConn->prepare("SELECT SessionData From UserSessions WHERE SessionData LIKE ?");

    $oRes = $oConn->execute($oPrep,array("%UserID%"));

    $aCurSession = $_SESSION; //Store SESSION DATA TO RESET LATER

    $aLoggedInUsers = array();
    while ($oRow = $oRes->fetchrow(DB_FETCHMODE_ASSOC)) {
        if ($oRow == NULL) {
            break;
        }

        $_SESSION = array();

        session_decode($oRow["SessionData"]);

        $aLoggedInUsers[] = new User($_SESSION["UserID"]);

        $_SESSION = array();
    }

    $_SESSION = $aCurSession; //RESET SESSION DATA TO current ONLINE USER

    return $aLoggedInUsers;
}

在我看来这可行,但有没有任何已知的情况,这可能会失败,然后当前用户最终会得到一些其他用户的会话数据,有效地作为可能的管理员或其他东西登录?将另一个字段存储在我的UserSessions数据库中以容纳UserID或类似的东西会更好吗?

**编辑***
我试图显示所有当前登录用户用户名(已在站点注册登录).

解决方法

我建议您在会话表中添加一列,该列在会话数据之外单独存储用户ID.这样你就可以使用sql获取这样的名字. (使用假设的用户表)

SELECT UserTable.userName From SessionData
INNER JOIN UserTable
ON SessionData.userId = UserTable.id

假设您在预定的一段时间后使用另一个查询来清除旧会话,此查询将返回每个登录用户的当前会话数据以及包含其用户名用户表中的用户行.

$_SESSION数组应仅用于存储与用户当前会话相关的信息,而不是用于存储站点周围的其他会话.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 使用$_SESSION超全局获取当前在线用户并将其重新设置回当前会话数据是否很难?全部内容,希望文章能够帮你解决php – 使用$_SESSION超全局获取当前在线用户并将其重新设置回当前会话数据是否很难?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。