Session和Cookie

Posted 奔跑的路奇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Session和Cookie相关的知识,希望对你有一定的参考价值。

Session和Cookie介绍

1 什么是会话跟踪技术

会话跟踪是Web程序中常⽤的技术,⽤来跟踪⽤户的整个会话。保持对⽤户会话期间的数据管理。常⽤的会话跟踪技术是Cookie与Session。
Cookie通过在客户端记录信息确定⽤户身份
Session通过在服务器端记录信息确定⽤户身份。

2.1 Cookie

2.1.1 什么是cookie

Cookie是客户端(⼀般指浏览器)请求服务器后,服务器发给客户端的⼀个辨认标识,保存在客户端,当客户端再次向服务器发送请求时,会携带着这个辨认标识,服务器就可以通过这个标识来识别客户端的身份或状态等。

Cookie的作⽤:跟踪会话,记录⼀次会话中(即Session,⼀次会话可能会有多次请求,当然也可以有多个Cookie来跟踪不同的信息)的信息,这样服务器就会知道⽤户的状态,⽐如有没有登录成功,付款时购物⻋中的东⻄等,就相当于贴在客户端脑⻔上的纸条,浏览器看不到,但服务器看得到。

2.1.2 Cookie的应⽤

保持⽤户登录状态:
将⽤户的信息保存到Cookie中,并发送给浏览器,并且将有效时间设置为⼀个较⻓的时间,这样浏览器在以后访问⽹站时,都会带着该Cookie,服务器以此来辨识⽤户,⽤户就不再需要输⼊⽤户名和密码等信息。
记录⽤户名:
⼀旦⽤户登录成功以后,下次再登录时,直接将Cookie中的⽤户名读取并显示出来,这样⽤户就不需要再次输⼊⽤户名,只输⼊密码即可。常见的就是你在游览器上登录了账号,下一次就不用输入密码可以直接登录了。

2.1.3 Cookie的工作原理

工作原理
原理:用户通过浏览器第一次向MyWeb网站发送请求申请OneServlet。OneServlet在运行期间创建一个Cookie存储与当前用户相关的数据,OneServlet工作完毕后,会将【Cookie写入到响应头】交还给当前浏览器。
浏览器接收到响应后,将Cookie存入浏览器的缓存,之后用户通过【同一个浏览器】再次向MyWeb网站发送请求申请TwoServlet时。浏览器会将之前推送过来的Cookie,写入到请求头发送去,此时TwoServlet在运行时,就可以通过读取请求头中Cookie信息,得到OneServlet提供的共享数据。
实现命令:同一个网站的不同请求,Cookie数据是共享的。

2.1.4 总结Cookie

工作流程:

 1. servlet创建cookie,保存少量数据,发送浏览器。
 2. 浏览器获得服务器发送的cookie数据,将自动的保存到浏览器端。
 3. 下次访问时,浏览器将自动携带cookie数据发送给服务器。

cookie操作

	1.创建cookie:new Cookie(name,value)
	2.发送cookie到浏览器:HttpServletResponse.addCookie(Cookie)
	3.servlet接收cookie:HttpServletRequest.getCookies()  浏览器发送的所有cookie       

cookie特点

	1. 每一个cookie文件大小:4kb , 如果超过4kb浏览器不识别
	2. 一个web站点(web项目):发送20个
	3.一个浏览器保存总大小:300个
	4.cookie 不安全,可能泄露用户信息。浏览器支持禁用cookie操作。
	5. 默认情况生命周期:与浏览器会话一样,当浏览器关闭时cookie销毁的。

cookie api

	getName() 获得名称,cookie中的key
	getValue() 获得值,cookie中的value
	setValue(java.lang.String newValue)  设置内容,用于修改key对应的	value值。
	setMaxAge(int expiry) 设置有效时间【】
	setPath(java.lang.String uri)  设置路径【】

3 Session

3.1.1 什么是Session

Session是另⼀种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,⽽Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

如果说Cookie机制是通过检查客户身上的“通⾏证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建⽴的⼀份客户档案,客户来访的时候只需要查询客户档案表就可以了。

3.1.2 创建Session的格式

Session对应的类为javax.servlet.http.HttpSession类。每个来访者对应⼀个Session对象,所有该客户的状态信息都保存在这个Session对象⾥。Session对象是在客户端第⼀次请求服务器的时候创建的。

Session也是⼀种key-value的属性对,通过getAttribute(Stringkey)和setAttribute(String key,Objectvalue)⽅法读写客户状态信息。Servlet⾥通过request.getSession()⽅法获取该客户的 Session
例如:

HttpSession session = request.getSession(); // 获取Session对象
session.setAttribute("loginTime", new Date()); // 设置Session中的属性                       
out.println("登录时间为:" +(Date)session.getAttribute("loginTime")); // 获取Session属性

3.1.3 Session的⽣命周期

Session保存在服务器端。为了获得更⾼的存取速度,服务器⼀般把Session放在内存⾥。每个⽤户都会有⼀个独⽴的Session。如果Session内容过于复杂,当⼤量客户访问服务器时可能会导致内存溢出。因此,Session⾥的信息应该尽量精简。

Session⽣成后,只要⽤户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。⽤户每访问服务器⼀次,⽆论是否读写Session,服务器都认为该⽤户的Session“活跃(active)”了⼀次。

由于会有越来越多的⽤户访问服务器,因此Session也会越来越多。为防⽌内存溢出,服务器会把⻓时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就⾃动失效了。一般是30分钟

Session的超时时间也可以在web.xml中修改。另外,通过调⽤Session的invalidate()⽅法可以使Session失效。

<session-config> 
 <session-timeout>30</session-timeout>
</session-config>

3.1.4 Session常⽤的⽅法

在这里插入图片描述

3.1.5 Session和Cookie的区别

(1) Cookie数据保存在客户端; Session数据保存在服务器端。
(2) Cookie的安全性较低; Session的安全性较高
(3) Cookie保存的内容是String类型; Session保存的类型是Object

cookie的工作原理?
	 cookie是由服务器端创建发送回浏览器端的,并且每次请求服务器都会将cookie带过去,以便服务器知道该用户是哪一个。
	 其cookie中是使用键值对来存储信息的,并且一个cookie只能存储一个键值对。所以在获取cookie时,是会获取到所有的cookie,然后从其中遍历。

session的工作原理?
	 session的工作原理就是依靠cookie来做支撑,第一次使用request.getSession()时session被创建,
	 并且会为该session创建一个独一无二的sessionid存放到cookie中,然后发送会浏览器端,浏览器端每次请求时,都会带着这个sessionid,服务器就会认识该sessionid,
	 知道了sessionid就找得到哪个session。以此来达到共享数据的目的。
	 这里需要注意的是,session不会随着浏览器的关闭而死亡,而是等待超时时间。

最后,如果有问题,希望指正,一起进步。

以上是关于Session和Cookie的主要内容,如果未能解决你的问题,请参考以下文章

少部分手机浏览器对于COOKIE支持不够导致服务端无法读取session的解决方案

Cookie和Session的工作流程及区别(附代码案例)

cookie和session

cookie和session

cookie和session

会话技术知识点整理(Cookie和Session)