Php Can';会话过期后无法进行查询
我对这些东西很着迷,但找不到直接的答案, 我在这里找过这个 但是 我还在拼命地想实现 会话过期后如何更新查询? 我不是说直接点击“注销”按钮 以下是基本的SQL结构:Php Can';会话过期后无法进行查询,php,sql,facebook,session,Php,Sql,Facebook,Session,我对这些东西很着迷,但找不到直接的答案, 我在这里找过这个 但是 我还在拼命地想实现 会话过期后如何更新查询? 我不是说直接点击“注销”按钮 以下是基本的SQL结构: CREATE TABLE auth_users ( email varchar(40) NOT NULL, password varchar(40) NOT NULL, online ENUM('1') DEFAULT NULL <-- HERE, it updates to 1 whe
CREATE TABLE auth_users (
email varchar(40) NOT NULL,
password varchar(40) NOT NULL,
online ENUM('1') DEFAULT NULL <-- HERE, it updates to 1 when user logged in, it updates back to NULL when user explicitly clicks on LOGOUT
) type=MyISAM;
但当用户关闭浏览器时,它不会更新回NULL
比如说,,
假设我们有两个用户:用户A,用户B
用户A已成功登录,现在用户B可以将用户A视为联机用户
如果用户A忘记单击“注销”并将关闭其浏览器,
用户B仍然可以将用户A视为在线。这就是问题所在
比如说,,
Facebook处理得很好
假设您的朋友刚刚关闭了浏览器(即他的会话不再存在),
然后你就可以看到他离线了
我做错了什么?处理离线/在线用户的方法不正确?在页面上使用简单的JavaScript 在body标签中 callLogoff()应替换为调用注销的JavaScript函数
试试看。在页面上使用简单的JavaScript 在body标签中 callLogoff()应替换为调用注销的JavaScript函数
试试看。我认为这里需要另一种方法。不要设置联机/脱机标志,而是设置“最后一次看到”时间戳。即,每次请求都将记录更新为当前时间戳。如果您想知道用户是否在线,只需执行以下操作:
if($current_time - $last_seen_time < $session_expire_limit) {
// online
} else {
// offline
}
if($current\u time-$last\u seen\u time<$session\u expire\u limit){
//在线
}否则{
//离线
}
否则,您需要某种类型的cronjob来在一定时间后自动重置数据库中的online
标志,但仍然需要last\u seen
列
//编辑
我不知道facebook是如何做到这一点的,但它可能是以下之一:;对于聊天和通知功能,facebook打开了一个“流”,这实际上是一个由服务器保持活动状态的小ajax调用(顺便说一句,这个ajax调用每40秒刷新一次)。此流可能用于跟踪在线用户。另一个选项(但可能性较小)是将事件附加到window.unload事件。这不太可能,因为页面刷新、点击指向另一个facebook页面的链接等也会触发事件。这意味着每次点击facebook内部链接时,事件都应该从浏览器中解除绑定。
想不出别的办法,只是一些建议。不幸的是,这些都是很难实现的,我想我上面的建议(在编辑之前)应该适合一个普通的网站。我认为这里需要另一种方法。不要设置联机/脱机标志,而是设置“最后一次看到”时间戳。即,每次请求都将记录更新为当前时间戳。如果您想知道用户是否在线,只需执行以下操作:
if($current_time - $last_seen_time < $session_expire_limit) {
// online
} else {
// offline
}
if($current\u time-$last\u seen\u time<$session\u expire\u limit){
//在线
}否则{
//离线
}
否则,您需要某种类型的cronjob来在一定时间后自动重置数据库中的online
标志,但仍然需要last\u seen
列
//编辑
我不知道facebook是如何做到这一点的,但它可能是以下之一:;对于聊天和通知功能,facebook打开了一个“流”,这实际上是一个由服务器保持活动状态的小ajax调用(顺便说一句,这个ajax调用每40秒刷新一次)。此流可能用于跟踪在线用户。另一个选项(但可能性较小)是将事件附加到window.unload事件。这不太可能,因为页面刷新、点击指向另一个facebook页面的链接等也会触发事件。这意味着每次点击facebook内部链接时,事件都应该从浏览器中解除绑定。
想不出别的办法,只是一些建议。不幸的是,这些都是很难实现的,我认为我上面的建议(在编辑之前)应该适合一个普通网站。
您可以通过注册关闭函数()和连接中止()来实现您的目标
你可以通过注册关闭函数和连接中止来实现你的目标,我不确定facebook是如何控制这件事的,但我可以从我的头脑中向你建议我将如何处理这件事 我将在auth_users表中添加一个日期类型的新字段,该字段将表示会话到期时间 然后在html页面中,您应该实现一些静默ajax代码,这些代码将在服务器上调用一个虚拟php页面(间隔非常重要,因为您必须平衡性能和功能)。此虚拟页将更新中用户的会话到期时间 auth_users表
因此,在任何给定的时间内,根据当前时间检查用户的会话到期时间将确定该用户是否在线。我不确定facebook如何控制这些内容,但我可以从我的头脑中向您建议我将如何处理这件事 我将在auth_users表中添加一个日期类型的新字段,该字段将表示会话到期时间 然后在html页面中,您应该实现一些静默ajax代码,这些代码将在服务器上调用一个虚拟php页面(间隔非常重要,因为您必须平衡性能和功能)。此虚拟页将更新中用户的会话到期时间 auth_users表
因此,在任何给定的时间内,根据当前时间检查用户的会话到期时间将确定用户是否在线。这些php函数不适用于此,根本不可用。他们在线跟踪脚本本身的连接状态,但是一旦html被提供,就不再有连接;也就是说,你的用户会