php session 在线用户,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,mysql

来源: https://codeday.me/bug/20190630/1332010.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值