用这个办法试试:
用用户数据表中加入一个字段 :uflag,默认值 为0当用户登录时,先检查uflag这个值 ,如果为1,则不能登录,如果为0的话则可以登录,用户登录时,将uflag字段置为1。这样其它用户就不能再登录了。
用用户数据表中加入一个字段 :uflag,默认值 为0当用户登录时,先检查uflag这个值 ,如果为1,则不能登录,如果为0的话则可以登录,用户登录时,将uflag字段置为1。这样其它用户就不能再登录了。
解决方案 »
- 新手求助 Notice: Undefined variable: HTTP_RAW_POST_DATA in错误!
- fsockopen求解
- 要疯了,哪位GG熟悉PHP 调用SOAP的
- 还是一个新手问题
- ZF中,_redirect()方法是否只能用在内容输出前?
- 2个form1个php怎么区分究竟是哪个form调用的php
- 跪求站内搜索PHP类,高手来帮忙!!
- javascript 能否控制 session 变量??
- HELP!关于php的ISAPI筛选器的问题!!!
- 请教大虾:PHP能否和Javascript进行数据交换?
- 有人用过cakephp框架吗,进来帮帮我!
- 怎样获取FCKeditor中的值?
不过,unlock就成个问题了,好象无法知道用户什么时候退出了.其实server系统是肯定知道的,不然怎么会有例如session失效的功能,但程序中如何得知?
如果能知道session什么时候结束,应该就可以当作这个用户退出了,不管他是正常退出的,还是连接中断了.有什么函数可以知道?
实在不行,可以定时刷新网页,记下当前刷新时间,如果下次进来当有另一个用户进来时,判断先前的用户是否已过刷新间隔,为true,则认为先前用户已退出
可以這樣處理:
數據庫增加一個欄位 , lastAccess .上次訪問時間
在站點內的所有頁面加入一個隱藏的 <frame> 高度,寬度均為0. 這個 frame 的 src 為站內的一個php文件 ,php文件負責更新 lastAccess . 定時刷新這個 frame .
用戶登入時,判斷 lastAccess 欄位 .
你不知道用户何时离开网站啊,也就是说,你什么时候去修改flag为0啊?
如果说是强迫用户按下“注销登录”,才去修改flag为0的话,那么用户直接关闭了IE或者干脆关了计算机,那么flag就一直为1 ,下一次谁都无法进去,这个用户帐号就作废了。
是这样的,对HTTP协议,server端只是响应client端的请求,将结果发给client,然后就把socket关闭了,所以,从socket角度来说,一次请求后,与clientr 连接就已经不存在了. 但从事务的角度上来说,session的一项功能就是要确定用户是否还连在上面,也就是在指定的时间内,client是否又有请求,而把网页作得能自动刷新,其实也就是帮用户提一次请求了.这个间隔确是象后面几位说的是与server端的设置有关.
所以,记录下用户访问(包括自动刷)的时间间隔,作为判断是否在线的依据应该是解决办法, 这有些象是模仿了session判断是否失效的功能,但,session是指对所有的http服务(只说PHP的).
做法和jekend(jekend)讲的差不多,
锁记录也是个办法,不过异常情况时,记录一旦被锁,很难解锁,要到数据库的控制台(本地或远程的)将数据库的一个进程kill掉,这条记录才会解锁
如果用jsp就好多了,大家知道,有个叫推的技术,可以知道用户是在线状态,也就可以判断用户是否已经登录了
那其他人使用同一帐户登录时:
比较一下IP地址不就可以防止其他人同时登录咯~
还有你说的原子操作,要是已经保证原子操作了,还哪来这些东西,不就什么问题也没有了吗~~
你说php.exe是吧,哦忘了告诉你了是有漏洞的~
你太在意这些字面上的东西了:)
我想你说的那些(技术上的东西)还是很有道理的,而且和大家说的也并不相悖吧,我以为,你说的应该是给我们在具体操作时的补充,也就是提醒,我们在给置标志在给flag赋值时,要小心资源共享的安全问题,要保证同一时刻只能有一个线程(win32)访问同一个资源或代码. 是的.你注意到了细节.