【问题标题】:checking status of session with session id使用会话 ID 检查会话状态
【发布时间】:2013-09-27 10:37:16
【问题描述】:

我正在尝试开发一个聊天应用程序,我需要知道其他用户是否处于活动状态。我已经经历了“时间戳”示例(如果最后一个活动超过指定时间,则认为用户离线)和这种方法的问题是这段代码需要通过javascript定期重复执行。

所以,我在想是否有任何方法可以通过知道会话 ID 来检查服务器中的会话是否处于活动状态。如果可能的话,我将在 MYSQL 表中为“最后一个会话 ID”创建一个额外的列我会在每次发送消息时检查它是处于活动状态还是关闭状态,我可以确定对方是否处于活动状态。

【问题讨论】:

  • 这听起来对我来说非常危险。它不仅依赖于永不改变的会话 ID,而且还可能将其他用户的会话 ID 暴露给用户。这可能会使会话固定攻击或会话劫持变得微不足道。

标签: php session


【解决方案1】:

你可以用 ajax 和 php 来做这个:

所以你必须在javascript中设置setInterval:

setInterval(function() {
 $.ajax({
 url: 'ajax.php',
 params:{
  action:'checkSessionTime'  
 },
  success: function(response) {
   var resp = JSON.parse(response.responseText);
   if(resp.state != 'valid')
   {
  location.reload();
    }
 }
  });
  }, 1000 * 60* 10);

在 PHP 中你有一个这样的函数:

function checkSessionTime(){
if($_SESSION['YourSessionId oder YourUserId']){
 echo json_encode(array('success' => true, 'state' => 'valid'));
}else{
echo json_encode(array('success' => true, 'state' => 'expired'));
}

}

【讨论】:

  • 这对了解其他人的状态有何帮助
  • 对不起,我没听懂你的意思。我认为问题只是检查会话的状态。
【解决方案2】:

您必须检查在服务器上保留有关会话信息的文件 -> 但这不是一个好主意。我认为更好的方法是重写默认会话系统,并在数据库中处理它们(保留 session_id、last_action、expire_date)。从这一点来说,完成你的任务就很容易了。

【讨论】:

    猜你喜欢
    • 2014-11-08
    • 2013-10-29
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    相关资源
    最近更新 更多