2

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

桌子:

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列中获得注销和登录时间的差异?

一种方法是将数据时间字符串转换为数字并获取它的差异。但我不知道那种方法。

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

4

1 回答 1

1

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

每个登录必须有某种会话标识符。否则,您将永远无法正确关联您的注销时间和正确的登录时间。有多种方法可以实现这一点,这取决于您的 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
于 2013-12-26T19:02:48.060 回答