该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Cookie技术核心

Cookie类:用于存储会话数据

  1. 构造Cookie对象 Cookie(java.lang.String name, java.lang.String value)

  2. 设置cookie void setPath(java.lang.String uri) :设置cookie的有效访问路径 void setMaxAge(int expiry) : 设置cookie的有效时间 void setValue(java.lang.String newValue) :设置cookie的值

  3. 发送cookie到浏览器端保存 void response.addCookie(Cookie cookie) : 发送cookie

  4. 服务器接收cookie Cookie[] request.getCookies() : 接收cookie

		//1. 创建Cookie对象
		Cookie  cookie = new Cookie("name","geguo");
		//2. 把cookie返回给浏览器(响应头)
		resp.addCookie(cookie);

resposeCookie设置情况

当再去访问,请求头会自动返回cookie信息 自动回传cookie信息

Cookie 原理

  1. 服务器创建cookie对象,把会话数据存储到cookie对象中。 new Cookie("name","value");

  2. 服务器发送cookie信息到浏览器 response.addCookie(cookie);

     举例: set-cookie: name=eric  (隐藏发送了一个set-cookie名称的响应头)
    
  3. 浏览器得到服务器发送的cookie,然后保存在浏览器端。

  4. 浏览器在下次访问服务器时,会带着cookie信息 举例: cookie: name=eric (隐藏带着一个叫cookie名称的请求头)

  5. 服务器接收到浏览器带来的cookie信息 request.getCookies();

Cookie 在什么情况下 浏览器自动把cookie发给 服务器

  1. void setPath(java.lang.String uri)

设置cookie的有效访问路径。有效路径指的是cookie的有效路径保存在哪里, 那么浏览器在有效路径下访问服务器时就会带着cookie信息,否则不带cookie信息。 默认的有效路径在当前web应用下 只有当访问路径和有效路径相同时 request才会传给服务器

  1. void setMaxAge(int expiry) :

设置cookie的有效时间。 正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。 负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!! 零:表示删除同名的cookie数据

  1. Cookie数据类型只能保存非中文字符串类型的。

可以保存多个cookie,但是浏览器一般只允许存放300个Cookie, 每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

删除Cookie

重新构造一个同名Cookie 覆盖掉旧的cookie setAge(0)

Session 技术

HttpSession类:用于保存会话数据

1)创建或得到session对象 HttpSession getSession()
HttpSession getSession(boolean create)
2)设置session对象 void setMaxInactiveInterval(int interval) : 设置session的有效时间 void invalidate() : 销毁session对象 java.lang.String getId() : 得到session编号 3)保存会话数据到session对象 void setAttribute(java.lang.String name, java.lang.Object value) : 保存数据 java.lang.Object getAttribute(java.lang.String name) : 获取数据 void removeAttribute(java.lang.String name) : 清除数据 4.3 Session原理

## 问题: 服务器能够识别不同的浏览者!!!不同浏览器窗口会得到相同的Session

   前提: 在哪个session域对象保存数据,就必须从哪个域对象取出!!!!
		浏览器1:(给s1分配一个唯一的标记:s001,把s001发送给浏览器)
				1)创建session对象,保存会话数据
						HttpSession session = request.getSession();   --保存会话数据 s1
		浏览器1	的新窗口(带着s001的标记到服务器查询,s001->s1,返回s1)	
				1)得到session对象的会话数据
					    HttpSession session = request.getSession();   --可以取出  s1

		新的浏览器1:(没有带s001,不能返回s1)
				1)得到session对象的会话数据
					    HttpSession session = request.getSession();   --不可以取出  s2

		浏览器2:(没有带s001,不能返回s1)
				1)得到session对象的会话数据
					    HttpSession session = request.getSession();  --不可以取出  s3

		
		代码解读:HttpSession session = request.getSession();
			
		1)第一次访问创建session对象,给session对象分配一个唯一的ID,叫JSESSIONID
				new HttpSession();
		2)把JSESSIONID作为Cookie的值发送给浏览器保存
				Cookie cookie = new Cookie("JSESSIONID", sessionID);
				response.addCookie(cookie);
		3)第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器
		4)服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象。
				if(找到){
					return map.get(sessionID);
				}
				Map<String,HttpSession>]


				<"s001", s1>
				<"s001,"s2>
		5)如果找到对应编号的session对象,直接返回该对象
		6)如果找不到对应编号的session对象,创建新的session对象,继续走1的流程

		结论:通过JSESSION的cookie值在服务器找session对象!!!!!
		4.4 Sesson细节
		1)java.lang.String getId()  : 得到session编号
		2)两个getSession方法:
				getSession(true) / getSession()  : 创建或得到session对象。没有匹配的session编号,自动创												建新的session对象。
				getSession(false):              得到session对象。没有匹配的session编号,返回null
		3)void setMaxInactiveInterval(int interval)  : 设置session的有效时间
					session对象销毁时间:
						3.1 默认情况30分服务器自动回收
						3.2 修改session回收时间
						3.3 全局修改session有效时间
<session-config>
	<session-timeout>1</session-timeout>
</session-config>

						3.4.手动销毁session对象
							void invalidate()     : 销毁session对象
		4)如何避免浏览器的JSESSIONID的cookie随着浏览器关闭而丢失的问题

/** * 手动发送一个硬盘保存的cookie给浏览器 / Cookie c = new Cookie("JSESSIONID",session.getId()); c.setMaxAge(6060); response.addCookie(c);

	总结:
			1)会话管理: 浏览器和服务器会话过程中的产生的会话数据的管理。

			2)Cookie技术:
					new Cookie("name","value")
					response.addCookie(coookie)
					request.getCookies()
			3)Session技术
					request.getSession();
					
					setAttrbute("name","会话数据");
					getAttribute("会话数据")

空文件

简介

1、Cookie技术 2、Session技术 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化