關於cookie的CRUD操作

說明

  我們在實現網站的自動登錄過程中有一種解決辦法是將用戶的賬號和密碼以加密的形式存放在瀏覽器的cookie中,當用戶在cookie的有效期內再次訪問網站時,該用戶不用自己再輸入用戶名和密碼,而是使用cookie中的用戶名和密碼進行登錄。

寫入cookie

//將用戶登錄信息存儲到cookie,下次免登錄,cookie中存放中文一定要編碼
Cookie cookie = new Cookie("userLogin",URLEncoder.encode(userName+"&"+password, "UTF-8"));
cookie.setMaxAge(rememberTime*24*3600);
//允許該應用下的所有界面使用這個cookie
cookie.setPath("/BlackSheep");
response.addCookie(cookie);

讀取cookie

//用戶尚未登錄,嘗試從cookie中讀取用戶的登錄信息
Cookie[] cookies = request.getCookies();
//獲取用戶存放在cookie中的登錄信息
if(cookies != null) {
for(Cookie ck : cookies) {
if(ck.getName().equals("userLogin")) {
String[] info = URLDecoder.decode(ck.getValue(), "UTF-8").split("&");
String userName = info[0];
String password = info[1];
//自動登錄
User user = UserDao.hasUser(userName, password);
if(user != null) {
//將當前用戶存放到session中
session.setAttribute("user", user);
response.sendRedirect(request.getContextPath()+"/index.jsp");
}
}
}
}

修改/刪除cookie

Cookie[] cookies = request.getCookies();
//清除用戶登錄信息的cookie
if(cookies != null) {
for(Cookie ck : cookies) {
if(ck.getName().equals("userLogin")) {
//只能通過設置該cookie有效期爲0來使該cookie失效
ck.setMaxAge(0);
//允許該應用下的所有界面使用這個cookie
ck.setPath("/BlackSheep");
response.addCookie(ck);
}
}
}

總結

  1)如果需要在cookie中存放中文字符一定要記得編碼和解碼,不然報錯。
  2)cookie的有效期時間單位是秒。
  3)cookie的setPath()方法,指定的是可以訪問該cookie的目錄。默認情況下只有設置了該cookie的頁面才能夠讀取和修改該cookie,如果想要讓這個cookie被同一應用下的所有頁面共享,那麼需要設置一下:cookie.setPath("/projectName");如果想要讓同一服務器下多個應用共享該cookie,那麼應該這樣設置:cookie.setPath("/");
  4)關於cookie的跨域名訪問需要用到cookie.setDomain();具體可以參考http://blog.csdn.net/lwwgtm/article/details/8845994
  5)對cookie做的修改和刪除操作也需要用到cookie.setPath();才能讓其它頁面共享到。
  6)最後,千萬不要忘記將cookie寫回去:response.addCookie(cookie);

參考

http://blog.csdn.net/lwwgtm/article/details/8845994
http://zhidao.baidu.com/link?url=QtcLDVmHOSd0_4b32WOfQJZ1WjYM_t1D4gAcD8PcgPYeQrnMZ-S9AyJ8L1EjjAj1BIA4FO_GP_PcoHS91nOiyq

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章