cookie+session,会话时间设定

43 篇文章 0 订阅

很多Web程序中第一次登录后,在一定时间内(如2个小时)再次访问同一个Web程序时就无需再次登录,而是直接进入程序的主界面(仅限于本机)。

实现这个功能关键就是服务端要识别客户的身份。而用Cookie是最简单的身从验证。如果用户第一次登录,可以将用户名作为Cookie写到本地,

代码如下:

Cookie cookie = new Cookie("user", user);

cookie.setMaxAge(365 * 24 * 3600); cookie.setPath("/");

response.addCookie(cookie);

当用户再次访问程序时,服务端程序应该检测这个Cookie是否存在,

代码如下:

Cookie[] cookies=request.getCookies();

for(Cookie cookie: cookies)

{if(cookie.getName().equals(user))

{// 如果user Cookie存在,进行处理break; }}

尽管从客户端可以获得User Cookie,但这上Cookie可能存在很长时间,而且仅凭这个Cookie就自动登录并不安全,因此,可以在服务端使用一个Session来管理用户。也就是当第一次登录成功后,就创建一个Session,并将用户的某些信息保存在Session顺。代码如下:HttpSession session =request.getSession(); session.setAttribute(user, user); session.setMaxInactiveInterval(2 * 3600); // Session保存两小时当再次访问程序时,确定了cookie存在后,就会继续验证User Session的存在,代码如下:Cookie[] cookies=request.getCookies(); for(Cookie cookie: cookies){if(cookie.getName().equals(user)){if(session.getAttribute(user) != null){// 直接forward到主界面break; }else{ // forward到登录界面}}}虽然上面的代码可以很好地实现自动登录功能,但是当浏览器关闭,再次启动后,由于Servlet用于保存Session ID的JSESSIONID Cookie是临时的(也就是说不是持久Cookie,当浏览器关闭后,这个Cookie就会被删除),因此,需要将JSESSIONID进行持久化。代码如下:HttpSession session = request.getSession(); session.setAttribute(user, user); session.setMaxInactiveInterval(2 * 3600); // Session保存两小时Cookie cookie = new Cookie("JSESSIONID", session.getId()); cookie.setMaxAge(2 * 3600); // 客户端的JSESSIONID也保存两小时session.setMaxInactiveInterval(interval)cookie.setPath("/"); response.addCookie(cookie); 如果使用上面的代码,即使浏览器关闭,在两小时之内,Web程序仍然可以自动登录。如果我们自已加一个JSESSIONID Cookie,在第一次访问Web程序时,HTTP响应头有两个JSESSIONID,但由于这两个JSESSIONID的值完全一样,因此,并没有任何影响。如果在响应头的Set-Cookie字段中有多个相同的Cookie,则按着path和name进行比较,如果这两个值相同,则认为是同一个Cookie,最后一个出现的Cookie将覆盖前面相同的Cookie,如下面的两个Cookie,最后一个将覆盖前一个:Set-Cookie: JSESSIONID=DDB2274CAC6739E1D6747B0043D5D90E; Path=/webSet-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2008 05:02:50 GMT; Path=/web由于下面两个Cookie的path不同,因此,它们是完全不同的两个Cookie:Set-Cookie: JSESSIONID=DDB2274CAC6739E1D6747B0043D5D90E; Path=/web1Set-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2008 05:02:50 GMT; Path=/web2谁有其他的方法实现自动登录,请跟贴!

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/worldcd/archive/2008/06/11/2534605.aspx

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fjza1168

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值