使用PHP中的会话找出谁在线。这是一个好方法吗?

时间:2013-01-29 15:26:25

标签: php performance session-state

我的PHP Web应用程序中有一个文件库会话机制。我想弄清楚用户是在线,闲置还是退出。目前我有两个解决方案,但不知道哪个更好。另外我不知道是否有一种比这两种更好的替代品。我的主要观点是,我不想在DB中存储会话,所以我想要一个使用文件库会话的解决方案。

解决方案1:我根据user_id创建会话文件是唯一的,然后每次用户执行某些操作时,我会更新会话中的时间戳,然后导致会话文件更新/再次写在磁盘上。当我想知道用户是否在线时,我使用他的user_id来读取会话文件的最后一个时间戳,如果它小于5分钟,我认为他在线,如果超过5分钟且不到10分钟,我认为他是闲置,除此之外我认为用户已经出局。

解决方案2:我通过在用户表中使用last_login字段来做同样的事情,每次用户在网站上执行某些操作或查看某些页面时,我都会使用最新的时间戳更新该字段,现在,如果我想看到该用户在线,我只需检查他的last_login时间戳,看看他的时间是否适合我在解决方案1中解释的在线状态,空闲状态或注销状态

所以我的问题是,哪一个会更快,而且开销更少。我的网站有5000名成员,每天可能有700到1200名登录成员。我有一个VPS,但很快就转移到专用服务器。那么除了这两个解决方案之外的任何建议?你选择哪一个?

非常感谢你们!

2 个答案:

答案 0 :(得分:0)

跟踪数据库中的会话以及常规会话处理程序。如果您不需要永久存储任何内容,可以在内存表中完成。

答案 1 :(得分:0)

使用cookies怎么样?

使用cookie来识别唯一用户,然后跟踪上次访问PHP页面的时间。然后提出一个超时机制 - 例如,如果他们在15分钟内没有访问过页面,那么就会从计数中删除它们。

如何设置cookie:

<?php
//Set a cookie which will expire when the browser is closed
setcookie('mycookie', 'myvalue');

//Set a cookie which expires in about a year
setcookie('longtime', 'nextyear', time() + (60 * 60 * 24 * 365));
?>

您需要的一个很好的例子:

<?php
//First we need to check if the user has visited before
//Let's use 'visittime' as the name for our cookie

if(isset($_COOKIE['visittime']))
{
  echo 'Welcome back!<br>';

  //Calculate how long is since the users last visit
  //We can do this simply by subtracting the last visit
  //time from the current time
  $timeElapsed = time() - $_COOKIE['visittime'];

  echo 'It has been ' . $timeElapsed . ' seconds since your last visit.';
}
else
{
  echo 'I see you are new here';
}

//Set the current time as a cookie and make it expire much later.
$nextYear = time() + (60 * 60 * 24 * 365);
setcookie('visittime', time(), $nextYear);
?>