我假设我不能使用会话而是使用 DATABASE 来执行此操作。所以用户会登录,它会设置他们的 TIMESTAMP,然后我会从数据库中显示出来。然后,当用户注销或他们的会话终止时,它会被删除。代码将如何查找这个?
更好的问题是,我的逻辑是否正确?这行得通吗?这有意义吗?
我假设我不能使用会话而是使用 DATABASE 来执行此操作。所以用户会登录,它会设置他们的 TIMESTAMP,然后我会从数据库中显示出来。然后,当用户注销或他们的会话终止时,它会被删除。代码将如何查找这个?
更好的问题是,我的逻辑是否正确?这行得通吗?这有意义吗?
默认情况下,应用程序服务器将会话数据存储在服务器上的临时文件中。
通过将会话数据存储在数据库表中,您可以创建一个界面来显示有关已登录用户的信息。除此之外,如果您需要通过添加来扩展应用程序,使用这种(数据库)方法是一个重要的优势不止一台服务器。
实现此类功能的最流行方法之一是创建一个session
包含用户会话数据的表。这可能看起来像:
create table session (
id number primary key,
data varchar(240),
timestamp date
);
数据列以序列化形式存储所有会话数据,每次用户请求数据时都会反序列化。
根据您使用的平台,序列化和反序列化可能具有内置支持。例如,如果您使用的是 PHP,那么这些函数session_encode
可能session_decode
会很有用。
您无法查明用户何时在 PHP 中注销,并且 Javascript 变通办法离稳定的解决方案有点远。
您需要做的几件事: 在您的用户表中创建一个名为last_activity
的列,并在用户加载页面时将其 last_activity 更新为当前时间。
有关谁在线的列表,请在数据库中查询 last_activity 值在 10 或 20 或任何分钟前更新的用户。
要更新 last_activity 列,请使用:
UPDATE users SET last_activity=CURRENT_TIMESTAMP() WHERE id=2
在线用户列表
SELECT * FROM users where last_activity >= (CURRENT_TIMESTAMP()-(60*20))