Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.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和Mysql中的会话_Php_Mysql - Fatal编程技术网

PHP和Mysql中的会话

PHP和Mysql中的会话,php,mysql,Php,Mysql,我想创建一个页面,我可以看到谁登录了我的网站。 对于每个登录后的用户,我创建一个会话,并发送一个查询,将mysql中的“Logged”行从No更改为Yes。 然后,在页面上,我使用PHP向所有人显示,谁在mysql中设置了Yes,它就可以工作了。 但是,我有一个问题,当有人关闭浏览器而不单击注销时,就会出现这个问题-查询不会执行,mysql中的Yes值保持不变。。。 如何创建这样的页面?除了定义超时之外,您不能做任何事情。这意味着您在登录后的首次呼叫(将您的客户行设置为“是”)应在每次请求(或每

我想创建一个页面,我可以看到谁登录了我的网站。 对于每个登录后的用户,我创建一个会话,并发送一个查询,将mysql中的“Logged”行从No更改为Yes。 然后,在页面上,我使用PHP向所有人显示,谁在mysql中设置了Yes,它就可以工作了。 但是,我有一个问题,当有人关闭浏览器而不单击注销时,就会出现这个问题-查询不会执行,mysql中的Yes值保持不变。。。
如何创建这样的页面?

除了定义超时之外,您不能做任何事情。这意味着您在登录后的首次呼叫(将您的客户行设置为“是”)应在每次请求(或每分钟为节省资源)时触发,以更新该客户行中的日期列。如果不再有更新,则将该客户定义为“不再登录”,并将列更新为“否”

除了定义超时之外,您不能做任何事情。这意味着您在登录后的首次呼叫(将您的客户行设置为“是”)应在每次请求(或每分钟为节省资源)时触发,以更新该客户行中的日期列。如果不再有更新,则将该客户定义为“不再登录”,并将列更新为“否”

而不是为登录或注销设置布尔值,确定会话过期的合理时间(例如1个月)然后将该时间量添加到时间戳中,并将其存储在数据库中,作为
session\u expires
或其他内容。然后,无论何时进行登录检查,都可以检查用户的会话是否已过期

此外,要手动终止会话(例如,如果用户注销),只需将
session\u expires
字段设置为过去的时间戳

编辑

我在周末无法使用计算机,因此无法正确更新我的答案


如果您需要查看活动用户,我过去做过的一件事是使用
last_seed
timestamp字段,该字段在用户在站点上做任何事情时都会更新。然后,在“用户登录”页面上,只需查询最近的内容,如“最近一次在过去15分钟内看到”。

请确定会话过期的合理时间(例如,1个月),而不是登录或注销的布尔值然后将该时间量添加到时间戳中,并将其存储在数据库中,作为
session\u expires
或其他内容。然后,无论何时进行登录检查,都可以检查用户的会话是否已过期

此外,要手动终止会话(例如,如果用户注销),只需将
session\u expires
字段设置为过去的时间戳

编辑

我在周末无法使用计算机,因此无法正确更新我的答案


如果您需要查看活动用户,我过去做过的一件事是使用
last_seed
timestamp字段,该字段在用户在站点上做任何事情时都会更新。然后,在“users logged in”(用户登录)页面上,只需查询最近的内容,如“最近15分钟内看到的内容”。

用户持续登录的原因是PHP会话超时,这可能是在PHP设置PHP.ini中配置的

查看以了解如何设置会话关闭处理程序(会话无效时将调用该处理程序)。调用关闭处理程序时,在数据库中将当前会话的“logged”设置为false。不过,它可能需要24分钟(php.ini中会话超时的默认值-
session.gc_maxlifest=1440
minutes)

将该值(
session.gc_maxlifest
)减少到2-3分钟,并在每个页面上使用ajax功能保持会话活动。这肯定会增加服务器的负载,但肯定会更好地表示当前活动的用户。您可以从
php.ini
或通过使用
ini\u集('session.gc\u maxlifest',30)减少该值在您的代码中


关于

用户保持登录的事实是由于PHP会话超时,这可能是在PHP settings PHP.ini中配置的

查看以了解如何设置会话关闭处理程序(会话无效时将调用该处理程序)。调用关闭处理程序时,在数据库中将当前会话的“logged”设置为false。不过,它可能需要24分钟(php.ini中会话超时的默认值-
session.gc_maxlifest=1440
minutes)

将该值(
session.gc_maxlifest
)减少到2-3分钟,并在每个页面上使用ajax功能保持会话活动。这肯定会增加服务器的负载,但肯定会更好地表示当前活动的用户。您可以从
php.ini
或通过使用
ini\u集('session.gc\u maxlifest',30)减少该值在您的代码中


关于

第一件事应该是用通俗易懂的英语提问,请参见下面我的更新答案。第一件事应该是用通俗易懂的英语提问,请参见下面我的更新答案。1个月可能不合适,因为问题中说,他想知道,现在有多少用户登录了。。。这应该至少有15分钟是准确的:)说得好,在阅读问题时完全错过了这一部分。1个月可能不合适,因为问题是,他想知道,现在有多少用户登录了。。。这应该至少有15分钟是准确的:)说得好,在阅读问题时完全错过了这一部分。我知道怎么超时,但你能告诉我怎么才能做到吗如果不再有更新,则将该客户定义为“不再登录”,并将列更新为“否”。就像垃圾收集器一样:更新客户设置loggedIn=0,其中分钟(TIMEDIFF(now)()