我要给一个网站的账号和密码加入到cookie或者session中,这样下次再打开的话用户名就会直接显示在输入框中,省去再去输入的麻烦,但是这里面我有个问题想问一下,
1.我的cookie是这样写的啊,Cookie cookie = new Cookie("LoginUserName", username),这样的话,我下次打开网页时候检查一下cookie里面是否有这个username,有的话就直接显示出来,检查时好像是从cookie数组中循环检查,但是我觉得:因为我的Cookie中是LoginUserName,每个cookie不是都是这个名字吗,这样新用户输入信息不是会覆盖以前的信息吗?也就是说cookie数组里面不是只有一个用户吗?那为什么还要循环遍历呢?
2.session也是一样,我想通过session来控制相同用户不能同时登陆两次,这样我就需要把所有用户的信息存到session中,然后在登陆时检查session,这里面又会出现问题了,session会覆盖,这样就无法得到所有用户的信息了。另外,还有就是用户信息存放的集合中的元素要随着session产生而增加,要随着session消失而减去,这个又怎么实现呢?这两个问题请大家详细的给我讲讲,谢谢

解决方案 »

  1.   

    Cookie是记录在客户端的,也就是客户端下次访问同样的网址时,浏览器会自动把Cookie记录的东西发送给对应的服务器。
    session是记录在服务器和客户端的,但是由于session是会话作用域,用session来实现自动登录貌似不可能吧。楼主上网上搜下Cookie的详细使用就可以了。
      

  2.   

    cookie会被创建在客户端,也就是说你上一个网站,你的电脑上会有一个cookie,而你朋友上这个网站他的电脑上也会有一个cookie,所以是互不干涉的,不会被覆盖.循环遍历的原因是不仅仅只有你创建的一个cookie,还有一些系统中本身存在的cookie.session虽然是在服务器端的,但是每个session都会有一个id头存在与之对应的cookie中,以便区分这个session是属于哪一个用户的,所以session也是不会被覆盖的,至于你想实现的那个功能,只能靠你自己写代码来实现了,但是你担心的问题是不存在的.
      

  3.   

    这个可以具体讲一下吗?在服务器端怎么读取来自不同用户的session?
      

  4.   

    session只是保存在客户端。服务器也是先根据不同客户端的cookie来读取session id,然后根据session id 到保存在自己这里的session中去取得信息。
    所以如果用户在浏览器中把cookie给禁用了,session也失效了,因为读不到对应的session id。这种情况下如果还想用session只能用encodeURL(),所以api中建议我们为了程序的健壮性,要用encodeURL()的方法
      

  5.   

    哦,刚才打字打错了,第一句是“session只是保存在服务器端”
      

  6.   

    但是我觉得:因为我的Cookie中是LoginUserName,每个cookie不是都是这个名字吗,这样新用户输入信息不是会覆盖以前的信息吗?Cookie cookie = new Cookie("LoginUserName", username)
    你看看怎么可能覆盖呢。
    每次都是重新 new 一个cookie对象的,不同的人在同一台机器上面登录多少次就有多少个cookie。
    那不同机器就不用说了
      

  7.   

    而且服务器响应并且把创建的每一个cookie对象都保存在一个数组里面做了一个缓存
      

  8.   


    你说的那个操作可能实现不了
    给你个思路吧,在数据库中增加一个状态,是否登录(0未登录,1已登录),每个用户登陆的时候先查询数据库此用户是否已登录,如果是就不让登陆,如果否就将状态改为已登录,当用户注销时再将状态改回未登录,而session的作用一般是用户登录时将用户信息存入session,在用户点击一些有权限的页面时判断session中是否有用户信息,如果没有强制跳转到登陆页面,让用户先登录.
      

  9.   

    Cookie不是一个一个存的,
    是所有的cookie组成一个数据结构,
    一起存在客户端的。
    所以取得Cookie的时候是一个数组,
    然后用名字匹配要取的值。在这里,循环的意义是:
    找到名字是“LoginUserName”的cookie,
    然后再取出这个“用循环找到的名字叫‘LoginUserName’”的cookie的值新用户输入的时候,新的就把旧的覆盖掉了,
    但是,存的时候还是所有cookie组成一组存,
    所以还是要循环。硬要找个类比的话,就好像list里面放了很多map
    每次都要循环这个list,找到key是“LoginUserName”的map,
    然后再取得map的其他值
    这个list就是cookie[],那个map就是各个cookie关于session,他的生命周期并不保证很精确的表示用户在线或者离线,
    有时候客户离线了,可是服务器那边的session还活者,
    所以用11楼的方法比较好。
    也可以用到session,
    就是如果用户直接关掉浏览器的话,就接收不到离线的消息了。
    这时候,可以监听session的unbound事件,
    就是当服务器注销session的时候,更新数据库中的用户状态good luck
      

  10.   

    不点注销就是登陆状态可以访问权限页面,页面关闭session会自动销毁,相当于注销 
      

  11.   

    页面中写入这个方法(页面关闭前执行的方法)
    function window.onbeforeunload(){
        //这里跳转到action执行改变用户登陆状态的方法
    }如果不行改为异步(dwr)试试具体操作我没有试过
      

  12.   


    那就只能用ajax做个保姆时不时的报平安了good luck