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. 以太坊智能合约开发 Solidity学习

    1. pragma solidity >=0.4.22 <0.6.0;//版本号,头文件 contract BooleanTest { bool _a;//默认返回false int nu ...

  2. Selenium(八):其他操作元素的方法、冻结界面、弹出对话框、开发技巧

    1. 其他操作元素的方法 之前我们对web元素做的操作主要是:选择元素,然后点击元素或者输入字符串. 还有没有其他的操作了呢?有. 比如:比如鼠标右键点击.双击.移动鼠标到某个元素.鼠标拖拽等. 这些 ...

  3. PlayJava Day019

    今日所学: /* 2019.08.19开始学习,此为补档. */ 1.this: ①this是成员方法的一个特殊的固有的本地变量,它表达了调用这个方法的那个对象. ②在成员方法内部直接调用自己(thi ...

  4. Java每日一面(Part1:计算机网络)[19/10/21]

    作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 1.UDP简介 1.1UDP报文结构: ​ Source Port:源端口 Destination Port:目标端口 Length:数据包长度 C ...

  5. JS基础语法---编程思想和对象

    编程思想: 把一些生活中做事的经验融入到程序中 面向过程:凡事都要亲力亲为,每件事的具体过程都要知道,注重的是过程 面向对象:根据需求找对象,所有的事都用对象来做,注重的是结果 面向对象特性: 封装, ...

  6. cell右侧的状态(accessoryType)

    Cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; Cell.accessoryType = UITableViewCe ...

  7. 微信小程序——表单验证插件WxValidate的二次封装(二)

    在上一篇博客<微信小程序——仿jqueryValidate表单验证插件WxValidate的二次封装>中,我将WxValidate做了再次封装,简化了初始规则数据的构造,但是当有错误时页面 ...

  8. 以太网驱动的流程浅析(二)-Ifconfig的详细代码流程【原创】

    以太网驱动流程浅析(二)-ifconfig的详细代码流程 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号以及<L ...

  9. 添加数据库数据后(SVN的更新和启动)、SVN启动

    一.添加数据库数据: 1.修改Excel表格,添加字段 2.修改数据库,添加字段 3.修改程序 4.使用Excel生成Tabletotable文件,并修改生成文件的内容. (1)删除cpp文件所有的H ...

  10. The Preliminary Contest for ICPC Asia Nanjing 2019

    传送门 A. The beautiful values of the palace 题意: 给出一个\(n*n\)的矩阵,并满足\(n\)为奇数,矩阵中的数从右上角开始往下,类似于蛇形填数那样来填充. ...