用这个办法试试:
用用户数据表中加入一个字段 :uflag,默认值 为0当用户登录时,先检查uflag这个值 ,如果为1,则不能登录,如果为0的话则可以登录,用户登录时,将uflag字段置为1。这样其它用户就不能再登录了。

解决方案 »

  1.   

    对啊,这就象很多程序语言里面的lock功能,先进来的lock一下.
    不过,unlock就成个问题了,好象无法知道用户什么时候退出了.其实server系统是肯定知道的,不然怎么会有例如session失效的功能,但程序中如何得知?
    如果能知道session什么时候结束,应该就可以当作这个用户退出了,不管他是正常退出的,还是连接中断了.有什么函数可以知道?
    实在不行,可以定时刷新网页,记下当前刷新时间,如果下次进来当有另一个用户进来时,判断先前的用户是否已过刷新间隔,为true,则认为先前用户已退出
      

  2.   

    jyc_nj(老蔣) : 其實用戶甚麼時候退出了,server 也是不知道的. session 失效只是用戶超過指定時間沒有訪問,而已,可能並沒有關閉瀏覽器 .
     可以這樣處理:
     數據庫增加一個欄位 , lastAccess .上次訪問時間
     在站點內的所有頁面加入一個隱藏的  <frame>  高度,寬度均為0. 這個 frame 的 src 為站內的一個php文件 ,php文件負責更新 lastAccess . 定時刷新這個 frame .
     用戶登入時,判斷 lastAccess 欄位 .
      

  3.   

    这样恐怕不好吧:
    你不知道用户何时离开网站啊,也就是说,你什么时候去修改flag为0啊?
    如果说是强迫用户按下“注销登录”,才去修改flag为0的话,那么用户直接关闭了IE或者干脆关了计算机,那么flag就一直为1 ,下一次谁都无法进去,这个用户帐号就作废了。
      

  4.   

    jekend(jekend):
      是这样的,对HTTP协议,server端只是响应client端的请求,将结果发给client,然后就把socket关闭了,所以,从socket角度来说,一次请求后,与clientr 连接就已经不存在了. 但从事务的角度上来说,session的一项功能就是要确定用户是否还连在上面,也就是在指定的时间内,client是否又有请求,而把网页作得能自动刷新,其实也就是帮用户提一次请求了.这个间隔确是象后面几位说的是与server端的设置有关.
      所以,记录下用户访问(包括自动刷)的时间间隔,作为判断是否在线的依据应该是解决办法, 这有些象是模仿了session判断是否失效的功能,但,session是指对所有的http服务(只说PHP的).
      

  5.   

    记录session,检查session,同内容session,error!
      

  6.   

    我的做法也是刷新,在PHP里只能这样做了
    做法和jekend(jekend)讲的差不多,
    锁记录也是个办法,不过异常情况时,记录一旦被锁,很难解锁,要到数据库的控制台(本地或远程的)将数据库的一个进程kill掉,这条记录才会解锁
    如果用jsp就好多了,大家知道,有个叫推的技术,可以知道用户是在线状态,也就可以判断用户是否已经登录了
      

  7.   

    记录用户登录是的IP,
    那其他人使用同一帐户登录时:
    比较一下IP地址不就可以防止其他人同时登录咯~
      

  8.   

    补丁,说白了就是拆东墙补西墙的东西,建议最好不要。要不然要系统工程师干嘛呢?一个很庞大的系统改一下是什么概念啊!
    还有你说的原子操作,要是已经保证原子操作了,还哪来这些东西,不就什么问题也没有了吗~~
    你说php.exe是吧,哦忘了告诉你了是有漏洞的~
      

  9.   

    : )补丁也没什么不好吧,更不能是象你所说的不可取.至于php.exe是否有漏洞,真的建议你不要以为这是什么可以支持你的证据,好东西里面,哪个没有补丁?软件的升级不都可以看作是一次在的补丁?再说下去,可就偏帖太多了,就真的成了误导了.:)
    你太在意这些字面上的东西了:)
    我想你说的那些(技术上的东西)还是很有道理的,而且和大家说的也并不相悖吧,我以为,你说的应该是给我们在具体操作时的补充,也就是提醒,我们在给置标志在给flag赋值时,要小心资源共享的安全问题,要保证同一时刻只能有一个线程(win32)访问同一个资源或代码. 是的.你注意到了细节.