码迷,mamicode.com
首页 > 其他好文 > 详细

登陆状态持久化

时间:2014-08-04 20:49:37      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   io   ar   cti   

前几天,一直都想实现登陆持久化功能,于是到网上各种翻阅资料。最终总结实现登陆持久化无非那么几种方法。

1.将信息存入session

2.将信息存入cookie,(可以采用MD5加密)

3.拉长cookie的有效时间

第一种操作最简单,也很容易实现,但是有个缺点:就是它的持久化只是在一次会话里面,也就是说当你关掉页面重新开启页面的时候,发觉信息已经被清除干净了。这样做显然不合适,第二种是用户名和密码(经过加密后)存入cookie,每次对cookie的信息进行校验,实现持久化。这也不是很好的办法,毕竟把密码等重要信息存进cookie,也是不安全的。

我要讲的就是第三种方法,也是我觉得可行性最高的方法。

session(会话)有一个sessionid这样一个属性,用来标识每一个用户。而sessionid实际上还是存在cookie里面的。所以只要拉长sesiionid在cookie的存活时间就可以实现持久化了。

在struts2中访问session或者cookie有两种方法:

1.伪访问:实现SessionAware接口(获得session)

       CookiesAware接口(获得cookie)

       CookieProvider接口(写入cookie)

再者你如果要访问Cookie还得在struts2里面配置拦截器。

<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="cookieProvider"></interceptor-ref>
<interceptor-ref name="cookie">
    <param name="cookiesName">ValidationMsg</param>
    <param name="cookiesValue">*</param>
</interceptor-ref>

但是这种方法是无法获取sessionid,为什么呢?

因为它是伪访问,通过这种方法返回的是一个Map.什么是Map?就是值对,它是用这样方式去模拟HttpServletSession。

获取不到那怎么呢?

只能以耦合性为代价了,去使用HttpServletAPI.

我们只需要这样写:

HttpServletResponse response = ServletActionContext.getResponse();
HttpServletRequest request =ServletActionContext.getRequest();
HttpSession session =request.getSession();
session.setAttribute("userName",user.getUserName());
String sessionid = session.getId();
Cookie cookie = new Cookie("JSESSIONID",sessionid);//注意key值必须和原来一样,否则服务器无法标识用户
cookie.setMaxAge(1*1800); // 设置cookie的生命周期1800s
cookie.setPath("/");
response.addCookie(cookie);  //cookie添加完毕

 

 这样就可以利用cookie的持久化,去实现关闭页面下次打开还可以自动登陆了。

 

登陆状态持久化,布布扣,bubuko.com

登陆状态持久化

标签:style   blog   http   color   使用   io   ar   cti   

原文地址:http://www.cnblogs.com/think-in-java/p/3890688.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!