分享

登陆状态持久化

 quasiceo 2014-08-06

登陆状态持久化 - 小小程序控

2014-08-05 20:14:25http://www.cnblogs.com/think-in-java/p/3890688.html--点击数:2

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

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的生命周期1800scookie.setPath("/");response.addCookie(cookie);//cookie添加完毕

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多