分析案例
答案:因为银行不会记住客户,只认银行卡
银行业务的特点
- 第一次办理存钱业务,银行就给客户发银行卡
- 之后每次到银行办理存钱、取钱业务,都需要带着银行卡
为什么需要cookie和session
HTTP协议是 无状态协议,一句话解释:
浏览器 不会保存 web服务器的信息,web服务器也 不会保存 浏览器的信息
也就是说:当浏览器输入用户名、密码登录成功后,再次访问服务器时,服务器还是不知道你是谁
为了解决 HTTP无状态 的问题,提出 cookie 和 session
也就是说:
- 浏览器的cookie中,
JSESSIONID=随机字符串的随机字符串,相当于 银行卡 - 服务器端的session中,也有该
随机字符串,相当于银行系统中,有该银行卡的记录 - 浏览器每次向服务器发请求时,会将cookie中的所有数据,也一并发送给服务器
cookie
Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie
位置
存储在浏览器
谷歌浏览器 的cookie位置如下:
C:\Users\系统登录名\AppData\Local\Google\Chrome\User Data\Default\Cookies
Edge 的cookie位置如下:
C:\Users\系统登录名\AppData\Local\Microsoft\Edge\User Data\Default\Network
存储方式
一般以 文本方式、SQLite数据库 存储
作用
记录用户的信息
- 记住用户名、密码
- 跟踪用户访问记录
如何修改cookie数据
- 浏览器端,使用javascript可以修改
- web服务器端可以修改。通过发送
Set-Cookie响应头,如下:Set-Cookie: sessionid=123456
缺点
- 安全性较低,容易被窃取
- 每个域名的cookie个数有限制,一般一个域名下可以有20-50个cookie,具体跟浏览器有关
- 有大小限制,一般4k左右,具体跟浏览器有关
- 由于cookie的一些缺点,有些浏览器会禁用cookie
- 每次访问服务器,都会传送cookie给服务器,浪费带宽
session
会话
位置
存储在web服务器
存储方式
一般以对象方式存储,如:jsp、python
创建
浏览器 第一次 访问web服务器时,web服务器端就创建了session对象,并生成 唯一字符串,并将该字符串作为cookie,发送给浏览器
session id 和 cookie jsessionid
jsp:生成 唯一字符串,可通过 session.getId() 获取
cookie:该 唯一字符串 作为 JSESSIONID 的值,作为cookie,发送给浏览器,格式:JSESSIONID=随机字符串
销毁
关闭浏览器。
其实关闭浏览器后,session不会立即销毁。当打开浏览器再次访问该web服务器时,如果cookie中没有 凭证,该服务器会再次 重复 创建 的过程session超时。
一般默认30分钟内,没有访问网站,就会认为session超时,即 web服务器端销毁该session通过代码销毁
jsp获取cookie
Cookie[] cookieArr = request.getCookies();
if(cookieArr != null && cookieArr.length>0 ) {
for(Cookie cookie : cookieArr) {
out.println(cookie.getName()+":"+cookie.getValue()+"<br/>");
}
}
out.println("session id:"+session.getId());
感谢:
https://blog.csdn.net/proglovercn/article/details/45514705

