Session和Cookie
Session和Cookie
- Session和Cookie
- cookie
- cookie的生命周期
- cookie作用域
- Session
- session的生命周期
- session作用域
- cookie和session安全性
为什么需要cookie和session?在web系统发展变迁时,web发展时随着需求的不断增多,交互的存在必然会引起多步操作,引入session和cookie用于保存操作,也就是对一种状态的记录。从记录状态的角度来识别session和ccokie。就拿最简单的登录功能来解说,当我们访问一个网站时,如果在此之前我们曾经登录过,浏览器会自动帮我们填充账号和密码。而cookie和session记录的就是这一种状态,不需要我们自己去填写,浏览器会自动记录状态。
cookie
cookie的原理,cookie是客户端连接服务器的一种凭证,保存于客户端。相当于如果一个客户端收到了服务器发过来的cookie,就相当于保存了这个服务器的资料,在以cookie的生命周期内都会使用同一个cookie对服务器进行交互,而不用浪费更多的资源。
了解一下cookie的工作流程:
- 客户端(浏览器)发起HTTP请求。
- 服务器接收到请求会进行cookie设置,也就是set-cookie(键值对)。
- 客户端接收到相应收到cookie,而后每次与服务器进行交互时都会携带cookie。
接下来我们抓一个包:
此时的cookie已经设置好,在接下来进行交互时就会自带一个cookie。
cookie的生命周期
在客户端与服务器交互结束的时候也就是cookie完成自己使命走向终结的时刻。
不过在有些时候cookie的生命周期并不是只由这个决定,在客户端连接服务器时,服务器有时候会设置cookie的生命周期,从停止交互开始计算,超过设置的生命周期,cookie此时会失效。不过当客户端保存了cookie时,再去连接服务器也是可以存在的。相当于,自己本地保存了账号密码,然后进行自动填充。
总结有两个因素:
- 自身存活时间,当服务器set-cookie时进行设定
- 客户端是否保留了cookie
cookie作用域
cookie是保存客户端的一种状态机制,当浏览器访问服务器收到cookie时,会将cookie进行存储。
- 单个字域名:cookie可以设置为单个字域名的所有页面共享
例如:将cookie设置为dream.com
则所有以www.dream.com
或blog.dream.com
开头的url页面都可以访问该cookie。
- 单个路径下的多页面,cookie可以设置为单个url根目录的多个页面共享
例如:cookie设置为/root
则所有以https://www.dream/root
开头的url页面都可以访问该cookie
Session
session相比于cookie的安全性要高许多,session存储于服务器中,因为cookie的不安全因素才有了session。在前面我们已经了解了cookie的工作流程。也看见了cookie是什么。session就是在cookie的基础上再加一个sessionId
。
sessionId的作用就是让服务器更好的识别对方客户端的身份,而且这个sessionId如果一旦被修改,服务器可以立马察觉对方身份异常,断开连接,从而保护客户端的信息。
服务器存储session有两种方式
- cookie:通过将唯一一个sessionId 存储于客户端的cookie中,服务器可以从多个请求来识别出用户。
- Server-side session storage(服务器端会话存储):数据库方式,文件系统,缓存等方式,当用户认证以后,服务器创建sessionID与用户进行关联,任何需要保留的数据都会保存在服务器中的session存储。
这两种方法都提供了一个可靠的方法来跟踪和管理用户状态。
session的生命周期
服务器存储session时为了避免资源浪费,相对的也会设置session的存活时间,在服务器返回sessionId时设置其时间,当过期活就需要重新获取新的sessionID来进行客户端与服务器之间的交互。
虽然服务器对其时间进行设置,不过当客户机意外关闭或者自身断开连接时也会影响到session的生命,不过这个行为是对客户端自身保存的sessionId产生一定的影响,下一次连接,客户机丢失sessionId需要重新连接服务器,会再次发送一个HTTP请求。
总结一下:
- 服务器保存session时设置的时间
- 客户端进程是否关闭,对客户端自身的影响
session作用域
已知sesssion存储在服务器,对于浏览器(客户端)是不可见的服务器会为每一个用户分配一个唯一
的sessionId,用于下次用户发来请求时进行session验证。
- 单个用户的所有操作:session存储于服务器端,对单个用户的所有操作都有效,记录用户此时的状态。
例如:当用户在登陆时,服务器会为该用户创建一个session存储用户信息,以便后续使用,可以让用户跳过登录页面。
- 不同的应用程序:session存储的数据对整个web程序都有效。
例如:你在当前购物车程序中使用了session存储数据,在接下来相应的网页中也许可以访问到这些数据。
cookie和session安全性
cookie存储于客户端,可见,可修改!
session存储于服务器,不可见,可修改不过一般修改后会导致服务器无法识别,所以这里就是一种不可修改的状态。