我想在我的网站上存储用户的登录历史记录。
桌子:
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