我的需求是这样的,之前用session保存用户的登录信息,但是由于偶然有出现一登录就提示会话消失,无论点击哪个模块都出现这种情况,web.xml配置的session时间是360000,只是偶然才出现这种情况,可能五百次登陆会出现一两次这样的情况,客户对此不满意,所以,想改用cookie记录会话,不知cookie的设置时候和sesion差不多?原来用session的时候,是判断用户登陆成功才写进session,如if(success)session.setAttribute("UserBean",UserBean),然后再写一个专门验证session是否过期的jsp页面,然后,被include进很多页面,内容就是判断session是否为空,如果不为空,就从session里面取出用户信息,
现在改用cookie来设置,怎么实现?

解决方案 »

  1.   

    登录信息一般肯定要用session来保存的,因为那是与服务器相关的,cookie只是在客房端机子上存储信息,如果用cookie的话,感觉不安全,试试在url后面加个sessionID,具体操作不记得了
      

  2.   

    为什么会一登陆就出现session丢失?
      

  3.   


    我也纳闷啊,即使是出现这种情况很少,客户不满意啊登陆五百次会出现一两次这样。想改用 cookie来做了,是不是也是把loginId记下来,传入cookie构造器?如
    Cookie myCookie=new Cookie("loginId",loginId);
     cookie.setMaxAge(360000); 
    response.addCookie(cookie); 然后在验证页面怎么判断??Cookie cookies[]=request.getCookies(); 
    Cookie sCookie=null; 
    String svalue=null; 
    String sname=null; 
    for(int i=0;i<cookies.length;i++) 

      sCookie=cookies[i]; 
      svalue=sCookie.getValue(); 
      sname=sCookie.getName(); 
     
    }  
    if(怎么样判断cookie过期??)
    ......
      

  4.   

    cookie比session更加不安全,我觉得还是用session比较好假如用户的浏览器设置了不保存cookie,问题怎么办
      

  5.   

    改用cookies不是办法吧,如果人家浏览器禁用了cookies怎么办?
    session超时倒时好理解,session丢失的概率太小了吧。
    如果是客户感觉到session丢失的话,我想概率应该不小了。
    你说的这种校验方式和我之前用的很像,理论上是可行(虽然不优雅)
      

  6.   

    cookie过期就会被删除应该判断为null,试试看
      

  7.   

    我不建议用cookie,不知道是不是线程安全问题,原来碰到过多人多台机子上登录,结果每台机子都是一个人的session,后来又无故好了
      

  8.   

    用cookie重写session实现。原来代码的地方就不用变动了。
      

  9.   

    改用 cookie 解决不了根本问题,因为默认情况下浏览器就是通过 cookie 来维护登录用户的 session id 的,是不是你的哪个模块的 Bug 现在光从行为上分析不好说,你可以通过记录每次请求的请求头和响应头信息的方法来跟踪 session 失效的原因,弄清哪儿的原因再解决,否则只能越弄越糟,更改实现老问题没解决可能还会引入新的 Bug。
      

  10.   

    试试通过 URL 改写来维护 session,这样就完全不依赖 cookie 了,当然效率比使用 cookie 要低。
      

  11.   

    或者使用 struts 框架,struts 框架会自己判断客户端浏览器是否可以使用 cookie,然后它会根据判定结果自己决定是采用 cookie 还是 URL改写 来维护 session。
      

  12.   

    ,但是由于偶然有出现一登录就提示会话消失,无论点击哪个模块都出现这种情况
    我可以断定,是缓冲或者代理服务器的问题。登录结果被缓冲了,并没有真正去服务器验证,后面当然就失效了。解决方法,在文件前面加上<%
    request.setCharacterEncoding("GBK");
    response.setHeader("Pragma", "no-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 0);
    %>
    <%!// return current time to proxy server request
      @Override
      public long getLastModified(@SuppressWarnings("unused")
      HttpServletRequest request) {
        return System.currentTimeMillis();
      }%>具体的解释你自己找吧...
      

  13.   

    如果cookie过期,就会从客户端浏览器被删除,所以根本找不到先前保存用户信息的那个cookie.
    再从安全角度来说,建议楼主用session.
      

  14.   

    有必要向大家说明一下,此应用中没有用到任何框架,都是采用原始的jsp+servlet+jdbc实现,而且jdk使用的是1.4,忘了说明一点,除了偶然出现登陆时提示会话消失之外,也有偶然在使用过程中点击任何一个模块会出现会话丢失的情况(极少数),在专门验证session的页面中进行这样判断
    if(request.getSession(false)==null){
    ErrorUtil.Show("对不起,您与服务器的会话已结束,请重新登录系统!");
    }else{
     UserBean user=session.getAttribute("user");
     .....进行相关操作.......
    }
     由于出现"对不起,您与服务器的会话已结束,请重新登录系统!"这些提示,那么肯定说明了session取不到值了,这如何是好??
     紫竹老大,你那个方法不是1.4来的吧?
      

  15.   

    竹子的那个和jdk的版本没关系
      

  16.   

    我决定采用session和cookie两种方法验证了
    如果session为空,在判断cookie,不知cookie是在哪个包里面啊?