简单理解Cookie及其应用
2016-07-31 16:18
330 查看
Cookie
概念:小点心。服务器向客户端发送的一段小文本,意味着Cookie存放在客户端,所以安全性差。Cookie在Web开发中设计为键值对(字符串)。Cookie分为两大类:
1)浏览器缓存Cookie
a)没有调用setMaxAge()
b)浏览器打开子窗体会共享缓存
2)持久化Cookie
在一个浏览器上最多支持300个Cookie,Cookie最大支持4KB,同一个域名的Cookie最多20个。
Cookie的API
1)setPath
a)前提是http://localhost/servlet_4/servlet/cookie添加cookie
b)一般情况下,setPath(path值)尽量与添加cookie的路径一致
c)setPath(“/servlet_4”)
2)setMaxAge():给Cookie设置生命周期
a)负数:Cookie是基于浏览器缓存的Cookie
b)0:Cookie会删除
c)正数:Cookie则为持久化Cookie
案例:
1)查看之前登录网站的时间
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset:UTF-8");
PrintWriter out= response.getWriter();
out.write("上次访问的时间:");
Cookie[] cookies= request.getCookies();
for (int i = 0;cookies!=null&& i < cookies.length; i++) {
Cookie cookie = cookies[i];
if(cookie.getName().equals("histroy")){
//把String转换成date
String histryValue=cookie.getValue();
long date=Long.parseLong(histryValue);
Date date1=new Date(date);
out.write(date1+"<br/>");
}
}
//产生新的cookies
Cookie cookie=new Cookie("histroy",System.currentTimeMillis()+"");
cookie.setPath("/");
cookie.setMaxAge(60*60*24);
response.addCookie(cookie);
2)登录时记住密码
//CookiesUtils工具类
public class CookieUtils {
public static void addCookie(HttpServletResponse response, String name, String Value,int time){
if(response==null){
return;
}
if(name.trim().equals("")){
throw new IllegalArgumentException();
}
//创建一个cookie对象
Cookie cookie=new Cookie(name,Value);
cookie.setPath("/");
cookie.setMaxAge(time);
response.addCookie(cookie);
}
public static String getCookie(HttpServletRequest request,String name) {
if(request==null){
throw new IllegalArgumentException();
}
if(name.trim().equals("")){
throw new IllegalArgumentException();
}
Cookie[] cookies = request.getCookie();
for (int i = 0; cookies!=null&&i < cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookie.getName().equals(name)) {
return cookie.getValue();
}
}
return null;
}
}
------------------------------------------------------
//登录表单处理servlet
request.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control","no-cache");
response.setHeader("Expires","-1");
response.setHeader("Pragma","no-cache");
//获得表单元素
String name = request.getParameter("name");
String password = request.getParameter("password");
String remember = request.getParameter("rememberMe");
List<User> list=Db.getAll();
String cookiesValue=CookiesUtils.getCookies(request,"login");
//获取login cookie的值判断是否为空,为空则不是记住密码
if(!StringUtils.isBlank(cookiesValue)){
if(cookiesValue.equals(name+"-"+password)){
if("N".equals(remember)){
//将时间设为0,销毁login cookie(覆盖之前的cookie)
CookieUtils.addCookie(response,"login","",0);
}
request.getRequestDispatcher("/index.jsp").forward(request, response);
return;
}
}
//在没记住密码的情况下登录,查数据库验证登录
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
if (name.equals(user.getUsername()) && password.equals(user.getPassword())) {
if ("Y".equals(remember)) {
//记住密码,将姓名和密码当做是login的值
CookiesUtils.addCookies(response, "login", name + "-" + password,3600*24);
}
//登录成功转发到指定页面
request.getRequestDispatcher("/index.jsp").forward(request, response);
return;
}
}
//登录失败返回登录页面
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
3)浏览历史列表
//记录历史列表servlet
//从链接中获取查看过的id
String id = request.getParameter("id");
//用于拼接观看过的所有id
StringBuffer sb = new StringBuffer();
//获得histroy cookie的值
String Value = CookieUtils.getCookies(request, "history");
//判断有没有histroy cookie,有则拼接id
if (Value != null) {
sb.append(Value);
sb.append("-" + id);
//跟新cookie
CookieUtils.addCookies(response, "history", sb.toString(), 60*60);
}else {
CookieUtils.addCookies(response, "history", id, 60*60);
}
-----------------------------------------------
//查看历史列表处理servlet
String value= CookieUtils.getCookies(request,"history");
List<Book> list=new ArrayList<Book>();
//从数据库获得书
Map bookMap=Db2.getAll();
if(value!=null){
//把history cookie里面的值进行分解成id
String[] ids= value.split("-");
for (String id : ids) {
list.add((Book) bookMap.get(id));
}
//把历史列表的书写到request域里面
request.setAttribute("bookList",list);
}
//转发到小显示页面
request.getRequestDispatcher("/BookList.jsp").forward(request,response);
}
相关文章推荐
- 简单理解session及其应用
- 简单cookie的应用
- 理解http session的原理及其深度应用
- kmp算法的思想及其简单应用(java版)
- Delphi 画布对象及其简单应用
- 【我看Hibernate】Hibernate 介绍及其简单应用
- 多线程的基本概念及其简单应用
- 【jquery模仿net控件】简单的datalist控件更新,及其简单应用
- 正确理解充分必要性及其在数学求解中的应用
- (Java2D 学习笔记系列) (一)一个简单的图像填充实例及其分析理解
- 隐马尔可夫模型及其在分词中的简单应用
- 一个比较容易调用 功能比较完善的 cookie 操作类 附带一些简单的应用示例
- fork()理解及简单并发服务器应用
- 如何理解Oracle数据库管理脚本及其应用
- SeqList.h (顺序表及其简单应用)
- PHP_cookie的简单应用
- 关于DataRow和DataColumn的一点个人简单理解-.NET教程,数据库应用
- 理解bitops中的__set_bit及其应用
- 【我看Hibernate】Hibernate 介绍及其简单应用
- Delphi 画布对象及其简单应用