详解Cookie和Session

目录

1.session是什么?

2.为什么使用session?

3.cookie是什么?

4.为什么使用cookie?cookie与session的联系?

5.cookie与session的区别?

6.cookie与session的交互过程?

1.session是什么?

在计算机中,尤其是在网络应用中,称为“会话控制”。session 对象存储特定用户会话所需的属性及配置信息,保存的位置是在服务端。说白了session就是一种可以维持服务器端的数据存储技术。

2.为什么使用session?

我们目前使用的互联网应用层协议基本上都是基于 HTTP 和 HTTPS 的,它们的本身是无状态的, 只负责请求和响应。但现在还需要用户能够登录,可以在论坛发帖子,在购物网站买东西等等。 这就需要 HTTP 协议能够记录用户的状态,在诸多请求中识别出是哪个用户。所以需要用用到session会话技术。

3.cookie是什么?

cookie是用来存储在客户端浏览器中的一种key-value的数据存储格式的文本文件。

这是一个请求发送的cookie,有如图以下属性:

cookie属性释义:

属性介绍
Namename字段为一个cookie的名称
Valuevalue字段为一个cookie的值
Domaincookie的域名。如果设成.test.com,那么子域名a.test.com和b.test.com,都可以使用.test.com的cookie
Path可以访问此cookie的页面路径
Expires/Max-Age此cookie超时时间,不设置,则为Session会话期,关闭页面,cookie失效
Size此cookie大小
HttpOnly设置为true,则js读取不到cookie
Secure标记为Secure的cookie,只能通过https请求发送
SameSite

限制第三方cookie。有3个值:Strict/Lax/None

Strict: 仅允许发送同站点请求的的cookie
Lax: 允许部分第三方请求携带cookie,即导航到目标网址的get请求。包括超链接<a href='...' />,预加载<link rel="prerender" />和get表单<form method="GET" />三种形式发送cookie
None: 任意发送cookie,设置为None,需要同时设置Secure,意味着网站必须采用https,若同时支持http和https,可以将http用307跳转到https

SameParty开启了  First-Party Sets 域名下需要共享的 Cookie 都需要增加 SameParty
Priority优先级,chrome的提案,定义了三种优先级,Low/Medium/High,当cookie数量超出时,低优先级的cookie会被优先清除

4.为什么使用cookie?cookie与session的联系?

session的创建目的初衷就是为了让服务端记住会话,简而言之就是让服务端能识别出来是哪个客户端,既然要记住,那服务端必须要存储每个会话的数据,比如:实际项目中最常用的用户信息等。服务端存储这些用户数据没问题,最大的一个障碍是怎么样识别诸多请求中哪些是同一个会话。要解决这个问题,只依靠服务端无法解决,必须需要客户端来配合:需要上传会话的标识

客户端上传会话的标识,必须是客户端和服务端都能支持的协议和数据,其实也可以看做是http请求支持的协议和数据,既然是基于http请求,最方便的就是利用cookie,cookie是一种key-value的数据存储格式,value的值正适合作为session的标识(session也是一种key-value的存储),在这种情况下cookie终于和session有了一定的联系。

session机制利用cookie来作为标识的传输机制,并不意味着只能用cookie,只要是服务端和客户端约定好了位置,session标识我可以放到http请求的任何位置(当然http请求必须得支持传输才可以)。你完全可以把session的标识放到http头Authorization字段,只要服务端能正确的读到此值并且正确解析即可。

5.cookie与session的区别?

  • 存储用户信息的位置不同:Cookie保存用户信息的位置是客户端浏览器,Session保存用户信息的位置是服务端
  • 安全性不同:Session保存用户信息的位置是服务端,它很难被修改,Cookie因为是保存在客户端,容易被截取和篡改,安全性不及Session。
  • 还是基于Session保存信息在服务器上,要是访问量增多的时候,会消耗服务器的资源。Cookie则不会。
  • 在保存重要信息的时候我们考虑用Session,其他不重要的信息时用Cookie

6.cookie与session的交互过程?

当客户端第一次request server发送请求时,server 产生 JSESSIONID 对应的值1,通过 http header set-cookie,传递给 browser,browser 检测到 http response header 里带 set-cookie,那么 browser 就会 create 一个 cookie,key=JSESSIONID,value=值1,而后的每次请求,browser 都会把 cookie 里的键值对,放到 http request header 里,传递给 server。

当在 server 端调用 http.getSession() 方法时,server 会先从 http request header 里解析出来 JSESSIONID 的值,再从一个 Map 容器里去找有没有 value,如果没有,就会产生一个 HttpSessioon 对象,放到这个 Map 容器里,同时设置一个最大生存时间。HttpSession 你也可以把它想象成是一个 Map,可以 getAttribute(),可以 setAttribute()。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值