0

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

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

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

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

非常感谢你们!

4

2 回答 2

0

使用 cookie 怎么样?

使用 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);
?>
于 2013-01-29T15:31:20.993 回答
0

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

于 2013-01-29T15:28:13.010 回答