将用户登录-注销时间存储到数据库中,这是不同的


Storing user login-logout time into database with it's difference

我想在我的网站上存储用户的登录历史记录。

桌子:

mysql> desc user_stat;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | varchar(64) | YES  |     | NULL    |       |
| login  | varchar(64) | YES  |     | NULL    |       |
| logout | varchar(64) | YES  |     | NULL    |       |
| diff   | varchar(64) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

当用户登录时,我执行插入。

insert into user_stat(id,login) values('".$id."','".NOW()."');

但是对于注销情况是令人困惑的。由于用户可能已在两个差异浏览器中登录。那么我怎样才能保持logout时间呢?类似于会话管理(尽管我没有使用会话变量进行登录注销)。我使用的用于登录注销的 JS sdk:http://jsfiddle.net/YCFpH/

另外,如何在diff列中获取注销和登录时间的差异?

一种方法是将数据时间字符串转换为数字并得到它的差异。但我不是什么方法。

数据时间差异的任何其他解决方案?

但是对于注销情况是令人困惑的。由于用户可能已在两个差异浏览器中登录。那么如何保持注销时间呢?

每个登录名都必须具有某种会话标识符。 否则,您将永远无法将注销时间与正确的登录时间正确关联。 有多种方法可以做到这一点,这取决于您的 Web 服务器平台。 至少,您可以在客户端上创建一个 uid(请参阅在 JavaScript 中创建 GUID/UUID?),并在用户注销时传递 uid。

此外,如果您不是按差异时间排序或加入,则登录和注销应该是日期时间数据类型,并且每次需要时都简单地计算差异,而不是存储。例如。

    set @time1 = now();
    set @time2 = date_add(now(), interval 30 second);
    select @time1, @time2, (timediff(@time1,@time2))

现在,您可以获得以秒为单位的时间差异。

2013-12-26 14:17:32 2013-12-26 14:18:02 -00:00:30