登陸狀態(tài)持久化 - 小小程序控2014-08-05 20:14:25http://www.cnblogs.com/think-in-java/p/3890688.html--點擊數(shù):2
前幾天,一直都想實現(xiàn)登陸持久化功能,于是到網(wǎng)上各種翻閱資料。最終總結(jié)實現(xiàn)登陸持久化無非那么幾種方法。 1.將信息存入session 2.將信息存入cookie,(可以采用MD5加密) 3.拉長cookie的有效時間 第一種操作最簡單,也很容易實現(xiàn),但是有個缺點:就是它的持久化只是在一次會話里面,也就是說當(dāng)你關(guān)掉頁面重新開啟頁面的時候,發(fā)覺信息已經(jīng)被清除干凈了。這樣做顯然不合適,第二種是用戶名和密碼(經(jīng)過加密后)存入cookie,每次對cookie的信息進(jìn)行校驗,實現(xiàn)持久化。這也不是很好的辦法,畢竟把密碼等重要信息存進(jìn)cookie,也是不安全的。 我要講的就是第三種方法,也是我覺得可行性最高的方法。 session(會話)有一個sessionid這樣一個屬性,用來標(biāo)識每一個用戶。而sessionid實際上還是存在cookie里面的。所以只要拉長sesiionid在cookie的存活時間就可以實現(xiàn)持久化了。 在struts2中訪問session或者cookie有兩種方法: 1.偽訪問:實現(xiàn)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值必須和原來一樣,否則服務(wù)器無法標(biāo)識用戶cookie.setMaxAge(1*1800); // 設(shè)置cookie的生命周期1800scookie.setPath("/");response.addCookie(cookie);//cookie添加完畢 這樣就可以利用cookie的持久化,去實現(xiàn)關(guān)閉頁面下次打開還可以自動登陸了。 |
|