会话技术:cookie和session

1. 会话技术

一次会话包含了多次请求和响应

一次会话:浏览器第一次发送请求的时候建立连接,建立会话,直到有一方断开的时候会话结束。

作用:==共享数据==

方式:

 1. 客户端会话技术:cookie
 2. 服务器端会话技术:session

概念:客户端会话技术,将共享的数据放到浏览器端

2.1 步骤

  1. 创建一个cookie的对象,绑定数据。

    1
    new Cookie(String name,String value);
  2. 发送cookie给浏览器

    1
    response.addCookie(Cookie cookie);
  1. 获取cookie,拿到数据

    1
    Cookie[] cookies = request.getCookies();

2.2 实现原理

==基于响应头set-cookie和请求头cookie实现的。==

2.3 cookie细节

2.3.1 一次是否可以发送多个cookie?

可以,在服务器端创建多个cookie对象,使用response调用多次 addCookie 方法发送给浏览器。

2.3.2 cookie在浏览器中保存多长时间?

  1. 默认情况下,当浏览器关闭后,cookie数据被销毁。
  2. 持久化存储:
    • setMaxAge(秒数)

==正数:==将cookie写到磁盘中,持久化存储,并指定cookie的存活时间,时间一到不管你是否关闭了浏览器,都会清除当前cookie,如果时间没到关闭了浏览器,打开浏览器的时候,cookie还在。

==负数:==默认值,浏览器关闭,cookie失效,如果浏览器不关闭,一直都在。
==0:==删除cookie.

2.3.3 cookie中是否可以存储中文?

  1. tomcat 8之前,cookie中不能存储中文。tomcat8之后可以存储中文了。
  2. 如果tomcat8之前想要存储中文怎么办,将中文进行urlEncoding编码存储。
  3. tomcat8之后,可以存储中文,但是不支持特殊字符,建议使用urlEncoding进行编码存储。

2.3.4 cookie是可以共享的

是否可以控制当前cookie发送哪些请求的时候可以被使用?可以控制

在同一个tomcat中部署了多个web项目的时候,这些项目中如果想要共享cookie.
setPath(“/“);表示当前tomcat中所有的项目共享此cookie.

setPath(String path);

设置cookie的生效范围,默认情况下,路径是当前的项目的虚拟目录。

2.4.5 不同的tomcat如何共享cookie呢?

setDomain(string path),域名,一级域名。
baidu.com是一级域名。
www.baidu.com
image.baidu.com 二级域名
如果一级域名相同的情况下,那么多个tomcat可以共享cookie数据。

2.4 cookie的特点

1. 存储位置:cookie存储在浏览器端。
​    2. 浏览器对于单个cookie的大小是有限制的,4kb同一个域名下面的总的cookie的数量有限制(20个)
​    
​     应用场景:
​         cookie存储的数据一般是不敏感的数据。
​         1.cookie可以在浏览器端存储购物车数据,登陆信息。


案例分析:
​ 1.记录用户上一次访问我们网站的时间。
​ 1.如果是第一次过来访问:提示:您好,欢迎首次访问
​ 2.如果不是第一次过来访问:提示:欢迎回来,您上次访问的时间是:2019-08-30 12:22:22

2. session

服务器端的会话技术:在一次会话中多次的请求之间共享数据,将数据保存在服务器端的对象中,这个对象就是session的对象。

2.1获取HttpSession对象。

1
request.getSession;

2.2 session共享数据

​ session.getAttribute();
​ seesion.setAttribute();
​ session.removeAttribute();

session是依赖于cookie存在的。

1.当 客户端关闭后,服务器端不关闭,两次获取的session是不是同一个session:不是同一个session;

2.当客户端不关闭,服务器端关闭了,两次获取的session是同一个吗?
不是。

session的钝化:
    正常关闭的时候,tomcat内存中的session数据会被保存到一个文件中。

session的活化:
    正常关闭的服务器启动的时候,会先读取文件中的session数据,然后加载到内存中。


3.session什么时候被销毁:
​ 1.服务器关闭的时候。
​ 2.session对象调用invalidate();销毁session对象。
​ 3.session是可以过期的。session默认存活时间30分钟。

30


​ 在conf文件夹下web.xml中配置session的过期时间:
​ 默认30分钟。