Session和Cookie,你真的弄清了吗?

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的工作流程:

  1. 客户端(浏览器)发起HTTP请求。
  2. 服务器接收到请求会进行cookie设置,也就是set-cookie(键值对)。
  3. 客户端接收到相应收到cookie,而后每次与服务器进行交互时都会携带cookie。

接下来我们抓一个包:

Session和Cookie,你真的弄清了吗?_第1张图片

此时的cookie已经设置好,在接下来进行交互时就会自带一个cookie。

cookie的生命周期

在客户端与服务器交互结束的时候也就是cookie完成自己使命走向终结的时刻。

不过在有些时候cookie的生命周期并不是只由这个决定,在客户端连接服务器时,服务器有时候会设置cookie的生命周期,从停止交互开始计算,超过设置的生命周期,cookie此时会失效。不过当客户端保存了cookie时,再去连接服务器也是可以存在的。相当于,自己本地保存了账号密码,然后进行自动填充。

总结有两个因素:

  1. 自身存活时间,当服务器set-cookie时进行设定
  2. 客户端是否保留了cookie

cookie作用域

cookie是保存客户端的一种状态机制,当浏览器访问服务器收到cookie时,会将cookie进行存储。

  • 单个字域名:cookie可以设置为单个字域名的所有页面共享

例如:将cookie设置为dream.com则所有以www.dream.comblog.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存储于服务器,不可见,可修改不过一般修改后会导致服务器无法识别,所以这里就是一种不可修改的状态。

你可能感兴趣的:(服务器,java,前端)