在网上看到一篇博客,所以将里面的内容用自己的方式写下来
1、Web程序中第一次登录后,再次访问同一个Web程序时就无需再次登录,而是直接进入程序的主界面(仅限于本机)。实现这个功能关键就是服务端要识别客户的身份。而用Cookie是最简单的身从验证。
如果用户第一次登录,可以将用户名作为Cookie写到本地,代码如下:
2、将用户名以cookie的方式发送到客户端,并且将用户名以session属性的方式保存到服务器端以保证安全性,最后处理JSESESSIONID使其持久化(以cookie的形式保存到客户端)当第二次登录时HTTP响应头便会出现两个ID但没有影响,具体代码如下:
1 /* 2 * 如果是第一次登录,将用户名和密码作为cookie写到本地 3 */ 4 String name = request.getParameter("name"); 5 String pwd = request.getParameter("password"); 6 User user = new User(); 7 String userInfo = user.toString(); 8 if(null!=name && !"".equals(name)){ 9 user.setName(name); 10 } 11 if(null!=pwd && !"".equals(pwd)){ 12 user.setPassword(pwd); 13 } 14 Cookie cookie = new Cookie("user",userInfo); 15 cookie.setMaxAge(360*24*60);//设置一年有效期 16 cookie.setPath("/");//可在同一应用服务器内共享方法 17 response.addCookie(cookie);//放松到客户段 18 //凭这个Cookie就自动登录并不安全可以在服务端使用一个Session来管理用户。 19 //当第一次登录成功后,就创建一个Session,并将用户的某些信息保存在Session 20 HttpSession session = request.getSession(); 21 session.setAttribute("user", userInfo); 22 session.setMaxInactiveInterval(3600*2);//2小时 23 //但是当cookie关闭后,用于保存SessionID的JSESSIONID会消失(此时cookie并没有过期) ,所以得将JSESESSION持久化 24 Cookie sessionId = new Cookie("JSESESSIONID",session.getId()); 25 sessionId.setMaxAge(2*60);//设置两小时 26 sessionId.setPath("/"); 27 response.addCookie(sessionId); 28 29 30 31 //当用户第二次登陆时,检测这个cookie是否存在 32 Cookie[] cookies = request.getCookies(); 33 for (Cookie cookie2 : cookies) { 34 //如果存在这个cookie进行页面跳转 35 if(cookie2.equals("user")){ 36 if(session.getAttribute("user")!=null){ 37 request.getRequestDispatcher("直接进入主页面的url").forward(request, response); 38 break; 39 }else{ 40 //跳转到登录页面 41 } 42 43 } 44 } 45 //如果使用上面的代码,即使浏览器关闭,在两小时之内,Web程序仍然可以自动登录。 46 //如果我们自已加一个JSESSIONID Cookie,在第一次访问Web程序时, 47 //HTTP响应头有两个JSESSIONID,但由于这两个JSESSIONID的值完全一样,没有任何影响 48 //如果在响应头的Set-Cookie字段中有多个相同的Cookie,则按着path和name进行比较,如果这两个值相同, 49 //则认为是同一个Cookie,最后一个出现的Cookie将覆盖前面相同的Cookie