浏览器、服务器会话

置顶

  1. 注意事项
    • 只能在同一个浏览器创建,同一个浏览器代表同一次会话。比如说你在Chrome中请求了创建Cookie接口,然后你在Firefox中请求遍历Cooke接口,就拿不到。
  2. 会话技术
    • 什么是会话?
      • 一次会话中包含多次的请求和相应。
    • 一次会话?
      • 浏览器第一次给服务器资源发送请求,建立会话。
    • 会话结束?
      • 直到有一方断开,(关闭浏览器 || 关闭服务器)。
    • 会话的功能?
      • 在一次会话范围内的多次请求之间,共享数据。
    • 共享数据的方式,Java中包含两种会话技术。
      • Cookie【客户端】
      • Session 【服务器端】

  1. JSP学习
  1. 概念
    • 客户端会话技术,将数据保存至客户端。

  1. 快速入门,创建Cookie对象,请求URL:talk/JinLuLu
    • 响应头(Response Headers)返回,Set-Cookie: msg=JinLuLu

@RequestMapping("/JinLuLu")
public String pasha(HttpServletRequest request, HttpServletResponse response) throws Exception {
	// 1.创建Cookie对象
	Cookie cookie = new Cookie("msg", "JinLuLu");
	// 2.发送Cookie对象
	response.addCookie(cookie);
	return "创建cookie对象";
}

  1. 快速入门,遍历拿到Cookie对象,请求URL:talk/YuYaoYao
    • 请求头(Request Headers)装载,Cookie: msg=JinLuLu

public String YuYaoYao(HttpServletRequest request, HttpServletResponse response) throws Exception {
	// 3.遍历拿到Cookie对象
	if (null != request.getCookies()) {
		Arrays.stream(request.getCookies()).forEach(item -> System.out.println("Name: " + item.getName() + ", Value: " + item.getValue()));
	} else {
		System.out.println("Cookie数组为空");
	}
	return "遍历cookie对象";
}

  1. 导师田斌讲解:响应头、请求头


  1. 实现原理
    • 基于响应头Set-Cookie请求头Cookie实现。

  1. Cookie细节
    • 一次可不可以发送多个Cookie呢?
      • 可以
      • 可以创建多个Cookie对象,调用response.addCookie进行保存。
    • Cookie在浏览器中保存多长时间?
      • 默认情况下,Cookie保存在浏览器的内存中,当浏览器关闭,Cookie自动销毁。
      • 一般情况下,我们都希望在浏览器关闭的情况下,也保存Cookie信息;这里有持久化存储解决方案
        • setMaxAge(int 秒数)
          • 整数:将Cookie数据写到硬盘的文件中,持久化储存,Cookie存活时间以秒为单位。
          • 负数:代表默认情况。
          • 零:删除Cookie信息。
    • Cookie能不能存储中文?
      • Tomcat8之前不能直接设置中文,Tomcat8之后Cookie支持中文。
      • SpringBoot自动集成Tomcat8。
    • Cookie共享问题?
      • 假设在一个Tomcat服务器中,部署了多个Web项目,那么在这些Web项目中Cookie能不能共享?
        • 默认情况下不能共享!
        • 想要实现共享调用
          • Cookie创建的时候,调用cookie.setPath("/");方法
          • 代表http://localhost:8888/ ,斜杠下所有的Web服务共享Cookie。
      • 不同服务器,Cookie是否可以共享?
        • 举例:百度、百度贴吧、百度新闻。
        • 怎么实现,使用共享域名实现?
          • news.baidu.com、tieba.baidu.com
          • 一级域名:baidu.com
          • 二级域名:news、tieba
        • 实现
          • setDomain(String path);如果设置一级域名相同。那么多个服务器之间Cookie可以共享!
          • cookie.setDomain(".baidu.com"),那么tieba.baidu.com、news .baidu.com中Cookie可以共享!

  1. Cookie的特点和作用?
    • Cookie存储数据在客户端浏览器、不太安全,易丢失、易篡改。
    • 浏览器对于单个Cookie的大小有限制(4kb)以及对同一个域名下的总Cookie数量也有限制(20个)。
    • 作用
      • Cookie一般用于存储少量的不太敏感的数据。
      • 在不登录的情况下,完成服务器对客户端的身份识别。
原文地址:https://www.cnblogs.com/Twittery/p/15132565.html