Cookie

直译是:小饼干。实际上,Cookie就是由服务器给客户端,并且存储在客户端上的一份小数据

应用场景

自动登录,查看浏览记录,购物车

Cookie存在的意义

HTTP请求是无状态的,客户端与服务器在通讯的时候,是无状态的。所以在客户端第二次访问服务器时,服务器不知道该客户端是否访问过。为了更好的用户体验,更好的交互【自动登录】,对公司来说,更好的收集用户习惯【大数据】

Cookie的使用

添加Cookie到客户端

1.在响应时添加Cookie

Cookie c = new Cookie("aa", "bb");
//使用response的addCookie(c)方法
response.addCookie(c);

2.在客户端收到的信息里,响应头就多出Set-Cookie字段

获取客户端带过来的Cookie

Cookie c = new Cookie("aa", "bb");
Cookie c1 = new Cookie("cc", "dd"); response.addCookie(c);
response.addCookie(c1);
//使用request的getCookies()方法
Cookie[] cookies = request.getCookies();
if(cookies!=null) {
for (Cookie cookie : cookies) {
String name = cookie.getName();
String value = cookie.getValue();
System.out.println(name + "=" + value);
}
}

常用方法

1.设置cookie的有效期
public void setMaxAge(int expiry)
设置 cookie 的最大生存时间,以秒为单位。

在浏览器关闭后,cookie就没有了,没有设置cookie的有效期

expiry:有效。以秒计算

​ 正值:表示在这个时间过后,cookie会失效。

​ 负值:关闭浏览器,则cookie就会失效。默认值为-1

2.赋新值
public void setValue(String newValue)
在创建 cookie 之后将新值分配给 cookie
3.用于指定只有请求了指定的域名,才会带上该cookie
public void setDomain(String pattern)
指定应在其中显示此 cookie 的域。
4.只有访问该域名下的cookieDemo的这个路径地址才会带cookie
public void setPath(String uri)
指定客户端应该返回 cookie 的路径。
cookie 对于指定目录中的所有页面及该目录子目录中的所有页面都是可见的。cookie 的路径必须包括设置 cookie 的 servlet,例如 /catalog,它使 cookie 对于服务器上 /catalog 下的所有目录都是可见的。

移除Cookie

官方没有提供delete方法。 也没有什么remove方法。

Cookie cookie = new Cookie("aa","bb");
cookie.setMaxAge(60*60*24);
reponse.addCookie(cookie);

删除cookie

一: 得到以前的cookie,然后重新设置有效期
Cookie [] cookies = request.getCookies();
Cookie cookie = CookieUtil.findCookie(cookies , "aa");
cookie.setMaxAge(0);
reponse.addCookie(cookie);
二:创建一个新的cookie
Cookie cookie = new Cookie("aa","xx");
cookie.setMaxAge(0);
reponse.addCookie(cookie);

例子 显示最近访问的时间。

  1. 判断账号是否正确

  2. 如果正确,则获取cookie。 但是得到的cookie是一个数组, 我们要从数组里面找到我们想要的对象。

  3. 如果找到的对象为空,表明是第一次登录。那么要添加cookie

  4. 如果找到的对象不为空, 表明不是第一次登录。

	if("admin".equals(userName) && "123".equals(password)){
//获取cookie last-name --- >
Cookie [] cookies = request.getCookies(); //从数组里面找出我们想要的cookie
Cookie cookie = CookieUtil.findCookie(cookies, "last"); //是第一次登录,没有cookie
if(cookie == null){ Cookie c = new Cookie("last", System.currentTimeMillis()+"");
c.setMaxAge(60*60); //一个小时
response.addCookie(c); response.getWriter().write("欢迎您, "+userName); }else{
//1. 去以前的cookie第二次登录,有cookie
long lastVisitTime = Long.parseLong(cookie.getValue()); //2. 输出到界面,
response.getWriter().write("欢迎您, "+userName +",上次来访时间是:"+new Date(lastVisitTime)); //3. 重置登录的时间
cookie.setValue(System.currentTimeMillis()+"");
response.addCookie(cookie);
}
}else{
response.getWriter().write("登陆失败 ");
}

Cookie总结

  1. 服务器给客户端发送过来的一小份数据,并且存放在客户端上。

  2. 获取cookie, 添加cookie

request.getCookie();

response.addCookie();

  1. Cookie分类

会话Cookie

默认情况下,关闭了浏览器,那么cookie就会消失。

持久Cookie

在一定时间内,都有效,并且会保存在客户端上。 

cookie.setMaxAge(0); //设置立即删除

cookie.setMaxAge(100); //100 秒
  1. Cookie的安全问题。

由于Cookie会保存在客户端上,所以有安全隐患问题。 还有一个问题, Cookie的大小与个数有限制。 为了解决这个问题 —> Session .

Session

会话,Session是一种基于Cookie的一种会话机制。Cookie是服务器返回一小份数据给客户端,并且储存在客户端。Session的数据存放在服务器端

  • 常用API

      //得到会话ID
    String id = session.getId(); //存值
    session.setAttribute(name, value); //取值
    session.getAttribute(name); //移除值
    session.removeAttribute(name);
  • Session何时创建 , 何时销毁?

  • 创建

如果有在servlet里面调用了 request.getSession()

  • 销毁

session 是存放在服务器的内存中的一份数据。 当然可以持久化. Redis . 即使关了浏览器,session也不会销毁。

  1. 关闭服务器
  1. session会话时间过期。 有效期过了,默认有效期: 30分钟。

JavaWeb之Cookie&Session的更多相关文章

  1. 【JavaWeb】Cookie&Session

    Cookie&Session Cookie 什么是 Cookie Cookie 即饼干的意思 Cookie 是服务器通知客户端保存键值对的一种技术 客户端有了 Cookie 后,每次请求都发送 ...

  2. JavaWeb -cookie&session&application

    cookie&session&application总结 Cookie[key-value](不是内置对象必须new): 1. Cookie 是由服务端生成的,在发送给客户端保存 2. ...

  3. JavaWeb请求与响应 Cookie&Session

    1.请求与响应 &Cookie&Session 1.1.请求与响应 HTTP协议 概念:英文全称:HyperText Transfer Protocol 中文全称:超文本传输协议   ...

  4. JavaWeb 8 Cookie

    JavaWeb 8 Cookie 2. 会话管理入门            2.1 生活中会话            我: 小张,你会跳小苹果码?            小张: 会,怎么了?      ...

  5. cookie,session,sessionid

    cookie,session,sessionid http协议是无状态的,意思是每次请求的状态不会保存.因此,产生了cookie,session之类保存会话状态的机制.1.什么是cookiecooki ...

  6. Servlet学习笔记(1)--第一个servlet&&三种状态对象(cookie,session,application)&&Servlet的生命周期

    servlet的404错误困扰了两天,各种方法都试过了,翻书逛论坛终于把问题解决了,写此博客来纪念自己的第一个servlet经历. 下面我会将自己的编写第一个servlet的详细过程提供给初学者,大神 ...

  7. 在IE浏览器中iframe跨域访问cookie/session丢失的解决办法

    单点登录需要在需要进入的子系统B中添加一个类,用于接收A系统传过来的参数: @Action(value = "outerLogin", results = { @Result(na ...

  8. 会话Cookie及session的关系(Cookie & Session)

    会话Cookie及session的关系(Cookie & Session) 在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用sess ...

  9. cookie,session,token的定义及区别

    参考了很多文章总结的. 1.cookie(储存在用户本地终端上的数据) 服务器生成,发送给浏览器,浏览器保存,下次请求同一网站再发送给服务器. 2.session(会话) a.代表服务器与浏览器的一次 ...

随机推荐

  1. go语言之数组

    1.go语言的数组和python的列表不一样,python的列表没有限定类型,而go的数组限定的类型,理由是这样的,请看下面的图 go语言的数组会数组中第一个值的内存地址,在我们上面的例子中,数组中的 ...

  2. 【朝花夕拾】Android自定义View篇之(二)Canvas常用功能

    前言 转在请申明,转自[https://www.cnblogs.com/andy-songwei/p/10960012.html],谢谢! 上一篇讲View的绘制流程中讲到过,最后一步是draw流程, ...

  3. 图数据库 Nebula Graph 的安装部署

    Nebula Graph:一个开源的分布式图数据库.作为唯一能够存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,还能够实现服务高可 ...

  4. 原生js对cookie的增删改查

    一.增 document.cookie = cname + "=" + cvalue + ";expires=" + expires + ";path ...

  5. Go-包

    Go-包 包的介绍以及使用 为什么使用包 为了更加好的维护代码 包的位置 必须再GOPATH路径的src中 能导入的内容 导入的内容名称必须是大写字母开头不然无法导入 包 src中的一个文件夹为一个包 ...

  6. Add a Parametrized Action 添加带参数的按钮

    In this lesson, you will learn how to add a Parametrized Action. These types of Actions are slightly ...

  7. 剑指offer 22:验证栈的压入、弹出序列

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

  8. 转战物联网·基础篇09-选择MQTT协议还是CoAP协议

      前面章节介绍过,MQTT协议和CoAP协议都是物联网中比较流行的协议,都对传输量做了很大的精简,传输开销小,以适应物理网的网络环境.   XMPP协议也有人说是适合物联网通信的,但它是基于XML, ...

  9. CCSpriteFrameCache的使用

    配置环境:win7+Cocos2d-x.2.0.3+VS2012 CCSpriteFrameCache是帧缓存类. 通过plist文件导入图片 CCSpriteFrameCache::sharedSp ...

  10. 飞思卡尔K60时钟分析

    推荐:NXP官方软件config tool,图形化界面可导出代码 K60芯片的时钟系统由振荡器(OSC).实时振荡器(RTC OSC).多功能时钟发生器(MCG).系统集成模块(SIM)和电源管理器( ...