Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Can';会话过期后无法进行查询_Php_Sql_Facebook_Session - Fatal编程技术网

Php Can';会话过期后无法进行查询

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

我对这些东西很着迷,但找不到直接的答案, 我在这里找过这个

但是 我还在拼命地想实现

会话过期后如何更新查询? 我不是说直接点击“注销”按钮

以下是基本的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 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被提供,就不再有连接;也就是说,你的用户会