一、如果登录时保存了Cookie,那么就要在关掉浏览器才叫不在线,你可以试一下,微软登录后,你在同一个浏览器进程上开几个网页,把微软的关掉,再访问微软的,一样是登录状态,也即是讲,如果浏览器进程关掉,才是不在线。二、你可以搞个SESSION,记录第一次登录时间,然后每在你的网页上操作一次,就把SESSION的登录时间改成现在的,即是ONLINE的时间截,然后那个客户端再操作多次,就有两种情况:
(假如超时是3分钟):
1、超时,则拿现在的时间截,和上次的时间截对比,如果超过3*60秒的话,则不在线,要重新登陆。2、在三分钟之内,和上次对比,不超过则继续操作,不需要重新登陆。

解决方案 »

  1.   

    请问session所记录的上一次时间用纪录自DB中吗,我记得session浏览器关闭后好像不能保存如果是这样,就没办法直接读取上一次改浏览器中的时间信息,是不是就应该用DB了。谢谢,我不是很了解
      

  2.   

    不是SESSION,搞错了,那个是时间的记录判断。SESSION是:
    判断是否登录,如果你登录注册了一个SESSION,当浏览器关掉时,SESSION的客户端ID会失效,也就可以说是没有登录,然后你的php.ini的SESSION超时默认是20分钟期限,所以在20分钟后自动删除掉SESSION,这就完全注销。所以用SESSION基本上不用什么设置,但是最好就是配合使用,否则会有安全问题(如果黑客知道了某个客户端访问的SESSION的唯一ID号,那就可以冒充已经登陆了,但基本上没这个可能)
      

  3.   

    我想明白了,我需要的是通过SESSION来判断用户在线状态,而用户登录状态直接用cookie判断即可。所以我的问题应该是
    1,怎样在用户关闭浏览器10分钟后自动更新isonline的值.
    2,怎样获取关闭浏览器的时间
      

  4.   

    我的想法是
    让session仅仅有一个作用.党浏览器存在cookie时判断session与上一次关闭浏览器到下一次打开浏览器时间隔时间,如果这段时间超过了预设,就更新isonline,如果没有超过,就不更新即
    if(!empty($_cookie[cookiename]))
    {
      if(session间隔时间>10分钟)
      {
        $db_conn->query(update .........isonline=0);
      }}但是我应该怎样取得session的间隔时间,请朋友给段代码。麻烦了
    我也不知道这样合理不合理,但是我觉得这样判断还行,哈哈,
      

  5.   

    要配合第一个登录:
    如登录文件为login.php,内容为:
    <?php
    //怎样登录的操作
    //这里是登录的时间
    $_COOKIE['time']=time();//第一次登录时间
    ?>然后,这里是你登录后的操作,因为这里要改变登录时间,要不登录后,10分钟内无论操作还是没有操作,10分钟后就会认定不在线了。所以每次访问你的PHP文件,都要有:
    <?php
    $_COOKIE['time']=time();//改变第一次登录时间,防止客户无论怎样,都会在10分钟后无效
    ?>这个是判断是否在线:
    if(!empty($_cookie[cookiename]))
    {
      $iftime=time()-$_COOKIE['time'];//判断未操作时间
      if($iftime>10)//判断是否超时
      {
        $db_conn->query(update .........isonline=0);
      }
      else
      {
       $_COOKIE['time']=time();//这样可以把用户定为已经登录了
      }} 
      

  6.   

    不过我要是需要从用户关闭浏览器开始,除了可以用onunload()这样设置$_COOKIE['time'],请问PHP怎样得到关闭浏览器的$_COOKIE['time'],谢谢