|
查看: 1094|回复: 12
|
PHP asynchronous events
[复制链接]
|
|
|
请问各为PHP高手帮帮忙,我想我的网页在User login 时,我可以知道那一个user在login。我想只要当User成功login后,update 其field 指示这个User login了,那就OK。但如果User按Close 钮离开或关机,那我要如何update filed回没有login呢?
希望您可以帮我,谢谢。 |
|
|
|
|
|
|
|
|
|
|
发表于 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 编辑 ] |
|
|
|
|
|
|
|
|
|
|
发表于 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...
谢谢赐教....
楼主人不见了... |
|
|
|
|
|
|
|
|
|
|
发表于 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
|
显示全部楼层
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|