Cookie和Session的理解

本文详细介绍了Web开发中Cookie和Session的工作原理及应用场景,包括两者的创建、获取方式、存储位置、大小限制、安全性等方面的对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 Cookie和Session

	场景:用户通过浏览器访问 Web 应用时,服务器都需要保存和跟踪用户的状态。
	cookie:客户端会话技术;
		原理流程:
			cookie客户端访问服务端,服务端响应给客户端的携带一段文本信息放在相应报文头中,可以看成是cookie对象,然后客户端进行保存的一段用户访问信息文本。
				如果浏览器保存在内存中,则称为会话级(默认)的cookie,退出浏览器就删除销毁了;
				如果把浏览器将这段信息(cookie对象)保存在硬盘中,则称为持久性cookie,可以设置有效时间(是cookie的一个属性字段);
				如果浏览器再次请求服务器,则把这cookie放在http请求头中一同发给服务器,服务器就好跟踪辨别了;
			
		创建获取:
			1、javax.servlet.http.Cookie
				里面含有方法,获取各种消息
			2、HttpServletResponse 接口和 HttpServletRequest 接口也都定义了与 Cookie 相关的方法,Cookie[] getCookies()	用于获取客户端提交的 Cookie对象。
		缺点:
			1、cookie是明文传递,不安全;
			2、客户端保存的cookie的数量和长度是有限制的;
			3、cookie是把对象信息编译成字符串进行保存;
			
	session:服务器端会话技术;
		原理流程:
			1、当客户端第一次请求会话对象时,服务器会创建一个 Session 对象,并为该 Session 对象分配一个唯一的 SessionID(用来标识这个 Session 对象)
			2、服务器将 SessionID 封装在cookie中以 Cookie(Cookie 名称为:“JSESSIONID”,值为 SessionID 的值)的形式发送给客户端浏览器;
			3、客户端浏览器再次发送 HTTP 请求时,会将携带 SessionID 的 Cookie 随请求一起发送给服务器;
			4、服务器从请求中读取 SessionID,然后根据 SessionID 找到对应的 Session 对象。
			5、同一浏览器的不同窗口共享同一 Session 对象,但不同浏览器窗口之间不能共享 Session 对象
				
		创建获取方式:
			1、HttpServletRequest.getSession() 方法可以获得 HttpSession 对象;
				方法参见:http://c.biancheng.net/servlet2/session.html
				Session 对象在服务器中驻留一段时间后没有被使用,就会被销毁,这个时间就是 Session 的过期时间。
			2、 javax.servlet.http.HttpSession 接口
			
		设置Session失效时间
				1、在web.xml中使用 <session-config><session-timeout>10</session-timeout></session-config>元素; 单位分钟,tomcat中session有效期默认20分钟;0或者负数表示永久有效
				2、调用session对象的setMaxInactiveInterval(int arg);参数为正数表示秒 0或者负数表示永久有效
					优先级:2>1
		销毁方式:
			Session 对象在如下 3 种情况下会被销毁:
				1)Session 过期;
				2)调用 session.invalidate() 方法,手动销毁 Session;
				3)服务器关闭或者应用被卸载。
		       注:值得注意的是,当客户端访问的 Web 静态资源 HTML,CSS,图片等静态资源时,服务器不会创建 Session 对象,cookie和session是你访问jsp和servlet的时候才创建,
	    Session 与 Cookie 对比
		Session 和 Cookie 都属于会话技术,都能帮助服务器保存和跟踪用户状态,但两者也存在差异,如下表。
		
		不同点								Cookie												Session
		存储位置不同					    	Cookie 将数据存放在客户端浏览器内存中或硬盘上。		Session 将数据存储在服务器端。
		大小和数量限制不同					浏览器对 Cookie 的大小和数量有限制。				    Session 的大小和数量一般不受限制。
		存放数据类型不同					    Cookie 中保存的是字符串。							Session 中保存的是对象。
		安全性不同							Cookie 明文传递,安全性低,。						Session 存在服务器端,安全性较高。
		对服务器造成的压力不同				Cookie 保存在客户端,不占用服务器资源。				Session 保存在服务端,每一个用户独占一个 Session。若并发访问的用户十分多,就会占用大量服务端资源。
		跨域支持上不同						Cookie 支持跨域名访问。								Session 不支持跨域名访问。

二、 关于session和Cookie作用域的理解:

“5、同一浏览器的不同窗口共享同一 Session 对象,但不同浏览器窗口之间不能共享 Session 对象”
session和cookie都是服务端创建,但保存位置及其他不同,因为是服务端出创建,所以上面的第5条是相对于请求的同一服务端来说的比如你访问淘宝,那么同一浏览器可能就会创建一个session对象保存身份信息,登录信息,用户状态这时你想对比一下京东上面的商品,当你访问京东时就算是同一浏览器,京东服务端也肯定会创建一个session保存关于用这个浏览器登录京东服务的用户登录相关信息;

三、后话

文中所写不符合逻辑或者不严谨之处,恳望007们海涵;本着知其然,知其所以然的态度,诚请007们留言指正,以免误导他人,若仍未解决大家的问题,望去他处拜询后,回来留言补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值