关于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

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