http://blog.csdn.net/phpBoy005/archive/2008/11/30/3413194.aspx
去看看吧
setcookie("id", $id, time()+30*60); 

解决方案 »

  1.   

    我是用session的,cookie感觉不安全.
    如果用户直接关闭页面了,所以操作都停止了吧?我怎么能在用户点击关闭页面时调用logout程序
      

  2.   

    我是想防止一个帐号N个人同时登陆啊,你用cookie的话,可以同时登陆的吧
      

  3.   

    setcookie了,把cookie时间设置为0就可以了
      

  4.   

    session有时经常掉线
    后来改用cookie
      

  5.   

    应该是我表达能力问题,举个例吧
    我现在在CSDN用frodeq这个帐号登陆且使用中,如果我一个朋友在美国也这时也想用frodeq登陆CSDN,那就提示"正在使用中,不能重复登陆",我怎么才能实现这样的效果?
    我的思路是用session,如果我登陆了,在数据库的time字段里插入我最后操作的时间,当另外一个用户想使用这个帐号登录的时候,读取数据库,看时间是否为空或距离现在已经超过半小时,这样才可以登陆.   我现在的困惑就是如果用户点"退出"选项退出登陆的话,数据库时间可以清零,但是如果用户直接关闭浏览器的话,我的数据库时间就定为最后的操作时间,无法清零,必须等半小时后才能马上又登陆.
      

  6.   


    if(isset($_SESSION['frodeq'])
    {
    echo "帐号已登陆!";
    exit;
    }
      

  7.   

    先记录最后使用IP及时间
    之后用ajax定时送keepalive packet更新最后在线时间登入时判断IP地址及最后在线时间决定是否可以登入
      

  8.   

    回楼上2位,记录IP我也想到过,不过记录IP的话效果就像9楼那样吧,可以把正在使用的人踢下线我想要的是我在这台机子用帐号AAA登陆之后,只要我一直在操控中,所有人都不能登陆,然后如果我退出了,不管另外一个人是在月球还是火星,只要知道AAA的帐号密码就可以登陆,如果点logout退出,可以调用程序清空数据库的表记录,我现在就是想知道如果客户直接关闭浏览器,我怎么调用程序清空数据库?断电或死机不考虑,正常来说一个网站你直接关闭浏览器之后如果再打开的话是马上又可以登陆的.强调一下,我是用session的,cookie不安全我觉得我说的已经够明白了,我已经举例了,9楼都很明白我在说什么意思.各位叫我发送mac地址也好,发送随机码也好,都是一个概念,我现在是想知道怎么在关闭浏览器的时候清空这些数据,不可能说一个帐号就只一个mac地址能登陆吧?
      

  9.   

    不好说,用ajax在后台加个心跳程序。 隔一段时间检测一次。和 IM 差不多了。
      

  10.   

    记录IP地址,如果已经登录,在其它地方再次登陆的话,不要先改变IP地址的变量,这样就可以实行IP地址已登陆后的限制了,如果用Cookies,什么设置过时为0,都是不行的,除非你在Cookies放了一个随机字符串进行验证,否则别人可以伪造Cookies甚至伪造HTTP头标
      

  11.   

    窗口关闭的时候可以用js搞一搞,比如
    <script>
    function window.onbeforeunload(){//页面关闭前用js做一些事
    if((event.clientX +15 )>document.body.clientWidth&&event.clientY<0||event.altKey){//为了区别刷新还是关闭,不过,现在ie7太麻烦了,关闭不一定是整个ie,可能是一个子窗口,那这里就要重新怎么搞一搞,我没搞过……
     var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//ajax搞一搞
    xmlHttp.open('get','test.php?useId=123',true);//test.php搞搞数据库什么的,useId可从cookie获得
    xmlHttp.send('');
    }
    }
    另外,一个网站可能开了n个页面,到底关哪个是最后一个页面
    那就,每开一个页面累加下cookie某个值,每关一个就减1,关的时候发现这个值是1,就认为是最后一个,去连接那个test.php处理
    搞到这里,都没信心了,这也太麻烦了吧
    显然,还没有考虑死机怎么办,ie非法关闭怎么办……
    可见,从客户端搞可以搞死人,从服务端搞,web一直连接受不了
    因此,直接踢走前一个人,是最好的方法,从伦理上也是这样……
    要有个白痴一直占的一个号不下台,那其他人到底什么时候能上台阿
    从道德上看,踢人似乎不道德,实际上是一种公平/公正/公开的舆论监督机制,如果有人被不道德的搞下台,他自然会反馈,搞什么飞机阿,老子可是花钱买的号……
    可见,从伦理和道德上说,QQ的踢人下台的机制,是得到广大劳动人民认可的
    从群众中来,到群众中去,每当我发明一种新需求的时候,我总要问自己,这种需求到底是为了程序员逻辑服务的,还是广大老百姓逻辑服务的……来人啊,关门放狗
      

  12.   


    if($_SESSION['userid']!=""){echo"对不起!您已经登陆了,请不要重复登陆!<a href='javascript:history.back()'>点击这里返回!</a>";exit;}
    将上面的代码加入到login.php的登陆的地方~~
      

  13.   

    理解yctin的意思了,
    利用ajax定时对用户的最后访问时间进行筛选,如果超过5分钟或者某个时间没有活动(利用session的最后更新时间进行判断),则视为这些用户已经退出,可删除这些过期数据。
    和LZ原来的做法相比各有利弊。
    lz(省去了ajax定时筛选在线用户的这部分负载,缺点是必须等到session自动过期)
    yctin(与lz反之)
    应该理解的没错吧