【问题标题】:Checking if specific user is online through php session variable通过php会话变量检查特定用户是否在线
【发布时间】:2012-05-20 12:39:32
【问题描述】:

我目前正在尝试使用 php 会话变量在我的网页上显示所有在线用户。为此,每当用户登录或注销时,数据库中的列都会设置为“在线”或“离线”。但这并不完全有效,因为当用户关闭浏览器时数据库不会更新(因此破坏了会话)。 那么是否有另一种方法可以检查是否设置了某个 sessionid?

目前我正在这样设置会话:

session_start();

$_SESSION['username']="Example Username";

要从当前用户页面检查是否有会话变量集,我们可以简单地使用:

if(isset($_SESSION['username']))
{
//username is set
}

但是,如果我们需要检查特定用户是否在线,我们如何获取例如已设置的所有会话变量的数组?例如

//Get all $_SESSION['username'] vars

//loop through array and check for specific $_SESSION

for($i=0; ... )
{
  if( $_SESSION['username'][$i] == "User 1" )
  {
  //do something
  }
}

从我目前阅读的所有内容来看,似乎没有一种方法可以在您的页面上获取所有会话的数组.. 那么有没有更好的方法呢,例如facebook、twitter 等如何处理这些东西? 感谢您的帮助!

【问题讨论】:

    标签: session


    【解决方案1】:

    一种解决方案是在您的数据库中存储一个时间戳,以及记录用户最后一次访问您的任何网站资源的在线/离线标志。那么您可能会在 15 分钟后或其他一些恒定值后将它们视为离线。

    另一种解决方案是在这里http://php.net/manual/en/function.session-set-save-handler.php 使用回调,我认为您可以在其中处理 gc 回调并在数据库中设置离线标志。

    如果您在该页面上搜索 class SessionDB 或转到 here,看起来有人已经在自定义类中实现了这个版本的某个版本!

    【讨论】:

      【解决方案2】:

      您可以使用简单的更新查询

      例如,您有一个用户表,其中有一个名为 status(online/offline) 的列

      在你的 login.php 上使用

      <?php
      //your user verification code
      if(variable that holds your sql query){
      $user_status=('UPDATE user SET status= online WHERE email="'your user email selector'")
      }
      

      然后在注销时执行类似的脚本,只需将在线值更改为离线

      【讨论】:

        【解决方案3】:

        你可以试试这个:

        foreach ($_SESSION as $sessionKey => $sessionValue)
        {
          if( $sessionKey == 'username' ) && ( $sessionValue == 'User 1' )
          {
          //do something
          }
        }
        

        【讨论】:

        • OP 的问题是编写“做某事”部分。再读一遍这个问题,乔恩。该代码中的 foreach 语句甚至没有任何用处,检查是否设置了“用户名”键并检查其值就足够了。
        • 很抱歉 - 我被困在这部分问题上:“我们如何获得一个包含所有已设置会话变量的数组?”
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-30
        • 1970-01-01
        相关资源
        最近更新 更多