佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1094|回复: 12

PHP asynchronous events

[复制链接]
发表于 8-12-2008 02:30 PM | 显示全部楼层 |阅读模式
请问各为PHP高手帮帮忙,我想我的网页在User login 时,我可以知道那一个user在login。我想只要当User成功login后,update 其field 指示这个User login了,那就OK。但如果User按Close 钮离开或关机,那我要如何update filed回没有login呢?

希望您可以帮我,谢谢。
回复

使用道具 举报


ADVERTISEMENT

发表于 8-12-2008 11:47 PM | 显示全部楼层
这个好像是死路来的哦。。
本来可以考虑用body onunload。。。。
可是以你的程序条件。。我看不能了。。。。
回复

使用道具 举报

发表于 9-12-2008 02:29 AM | 显示全部楼层
每个http request时就记录他的时间,然后看最后request 是几时。

如果
   现在时间 - 最后request时间 > N 分钟
就当那个user已经log out.

当然, 你要设定你cookie/ session 的时间 = N 分钟。
回复

使用道具 举报

发表于 9-12-2008 10:34 AM | 显示全部楼层
原帖由 戒日王 于 9-12-2008 02:29 AM 发表
每个http request时就记录他的时间,然后看最后request 是几时。

如果
   现在时间 - 最后request时间 > N 分钟
就当那个user已经log out.

当然, 你要设定你cookie/ session 的时间 = N 分钟。


这个是当那个在idle的时候吧。。。。
要是不idle然后按Close 钮离开或关机
那个field还是一样update不到logout.
回复

使用道具 举报

发表于 9-12-2008 11:02 AM | 显示全部楼层
原帖由 lawty 于 9-12-2008 10:34 AM 发表


这个是当那个在idle的时候吧。。。。
要是不idle然后按Close 钮离开或关机
那个field还是一样update不到logout.


我的意思是,不需要update回user status的field。只需要一个类似last request的field,但会增加server和database的负担。

不然就再写一个services,看看哪一个user 的idle 时间超过N分钟,就自动set  他的status 为 " logout"
回复

使用道具 举报

发表于 9-12-2008 02:04 PM | 显示全部楼层
不需要update回user status的field
那么就是说..
那个user要在一定的时间过了才可以login。。。
而。。。不可以立刻login。。。。。

不知道可以介绍什么service来用下。。。
我也想很久了。。。

[ 本帖最后由 lawty 于 9-12-2008 02:06 PM 编辑 ]
回复

使用道具 举报

Follow Us
发表于 9-12-2008 02:26 PM | 显示全部楼层

回复 6# lawty 的帖子

也可以这么说,这是要鼓励user 自己按log out完全退出。
不然就要等system 自己detect idle时间才自动update 他的status...

至于那个services, 我通常是自己写的。。。
我是用visual studio, 开一个叫 “windows service”的 project.....
然后加一个叫timer 的 component, 自己决定timer 的 interval time, 如多少秒、分钟运行一次。。。。
写一个function, 看看哪一个user 的idle 超过而没有log out, set 他的status 为“logout”...

大概是酱。。。
回复

使用道具 举报

发表于 9-12-2008 02:44 PM | 显示全部楼层
我通常是php的。。。
不知道可不可以用window services...
谢谢赐教....

楼主人不见了...
回复

使用道具 举报


ADVERTISEMENT

发表于 9-12-2008 03:20 PM | 显示全部楼层

回复 8# lawty 的帖子

hmmm....如果是在linux + php, 恐怕windows service无法运行。。。
如果是 windows server + php, 应该没问题。


另外,我不觉得user status field很重要, 如果要查询这个user 是否在线,就检查他的last request time, 如果current time - last request time > 100,000(随便,这里放100秒),就print log out.
回复

使用道具 举报

 楼主| 发表于 9-12-2008 08:08 PM | 显示全部楼层
谢谢各位的回复。可是我是PHP初学者,可以讲详细一点吗?也许我换另外一个方式询问: 我要如何做到相同的User Name 不能login多过两次?谢谢。
回复

使用道具 举报

发表于 11-12-2008 12:06 PM | 显示全部楼层
看到标题还以为你要写php event loop 呢。。
回复

使用道具 举报

发表于 15-12-2008 08:49 PM | 显示全部楼层
mikeng...
这是我以前做过的。。。
还可以改进。。。。
参考下。。。

1- logged in
0- available

首先。。。
当user-1 login的时候。。。。
就把user-1的status转换1,再keep一个时间的field。。。
然后就好像 "戒日王"说的。。。
放一个时间限制。。。。
要是user-1停留超过那段时间(current time minus 时间field) > limited time range,
下一步就把user-1 kicked out.
当然,当中要使user-1一直都有保持互动的话。。。
那么你就要update那个时间的field,保持最的时间。。。

然而。。。要是user-1按了 x (close)button。。。
那么。。。user-1就要等到那个 limited time range 过后才可以login。。。

不知道是不是你要的。。。。
回复

使用道具 举报

 楼主| 发表于 18-12-2008 10:39 PM | 显示全部楼层
谢谢您,我先试试。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 21-12-2025 11:15 AM , Processed in 0.148244 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表