php4中增加了对SESSION的支持,你可以设置php.ini,php德session默认依赖于cookie,但是你可以取消对cookie的依赖,这样就可以在浏览器关闭后session自动失效。

解决方案 »

  1.   

    没有办法。由于http并不是持续连接,无法做到b/s间的及时通讯,所以才会出现session过期时间这个属性。asp中一样不存在这样的及时机制,他虽然可以统计有效地session数量,但那也只是还未过期的session数量,他同样依靠session过期时间以及浏览器的进程号变更来判断session是否存在、有效。这方面对于所有的脚本都差不多的
      

  2.   

    现在有些聊天室做的接近及时通讯,是应用了Applet或者有的干脆开发com控件来实现
      

  3.   

    <SCRIPT LANGUAGE="VBScript" RUNAT="Server">Sub Application_OnStart
    ' Set our user count to 0 when we start the server
    Application("ActiveUsers") = 0
    End SubSub Session_OnStart
    ' Change Session Timeout to 20 minutes (if you need to)
    Session.Timeout = 20
    ' Set a Session Start Time
    ' This is only important to assure we start a session
    Session("Start") = Now
    ' Increase the active visitors count when we start the session
    Application.Lock
    Application("ActiveUsers") = Application("ActiveUsers") + 1
    Application.UnLock
    End SubSub Session_OnEnd
    ' Decrease the active visitors count when the session ends.
    Application.Lock
    Application("ActiveUsers") = Application("ActiveUsers") - 1
    Application.UnLock
    End Sub</SCRIPT>
    上面是Asp统计在线用户的完备方案,可是当用户关闭浏览器窗口时,它的计数并不会马上减一,而是要等到session_end事件触发,而本身这个事件是建立在用户在规定时间(默认20分钟)内没有请求才触发
      

  4.   

    并不是取消session依赖cookie,关闭浏览器就会消失。而是session就用不了了。
    在php.ini中
    session.cookie_lifetime = 0
    这里设置为0,关闭浏览器的话session就马上清除了对于楼主的要求,可以用window.onunload事件来达到,当关闭浏览器的时候触发onunload事件,这时候可以打开一个小窗口来更改他在数据库的状态,并注销当前的session,更改完后自动关闭这个小窗口
    <script>
    window.onunload=function(){
      open('exit.php','','width=1,height=1,status=0,menubar=0,toolbar=0,scrollbars=no');
    //在exit.php里面处理
    }
    </script>
      

  5.   

    啊哈啊哈 要是网络出问题,那个人就死在数据库里面了
    建议你这样:
    一个用户近来的时候 你当然是向数据库写他的状态了
    不过你还可以这样 检测以下数据库里面最后刷新时间和现在的时间比较是不是超过了一定时间
    超过了 就kick
      

  6.   

    嗯,事实上我最后还是这样做的,因为是在别人的机器上,所以当然没有权限去改php.ini, 只好给每个用户设了一个参数,登陆时用time(),记下时间,然后过一分钟就check 一次,并刷新时间,每个人都会对所有在线的人check,并删去超时的记录,效果还不错,vivanboy 的主意不错,但在关窗口的时候还是不好完美的解决.
      

  7.   

    我对
    session.cookie_lifetime = 0
    的理解是直到浏览器被关闭,这个session才会失效

    session.cookie_lifetime = 120
    意味着即使浏览器未被关闭而客户端20分钟内未有新请求这个session自然失效