zoukankan      html  css  js  c++  java
  • cookie/session

    cookie:Cookie是由HTTP服务器设置的,保存在浏览器中

    1. 浏览器向某个URL发起HTTP请求(可以是任何请求,比如GET一个页面、POST一个登录表单等)
    2. 对应的服务器收到该HTTP请求,并计算应当返回给浏览器的HTTP响应。

      HTTP响应包括请求头和请求体两部分,可以参见:读 HTTP 协议

    3. 在响应头加入Set-Cookie字段,它的值是要设置的Cookie。

      RFC2109 6.3 Implementation Limits中提到: UserAgent(浏览器就是一种用户代理)至少应支持300项Cookie, 每项至少应支持到4096字节,每个域名至少支持20项Cookie。

    4. 浏览器收到来自服务器的HTTP响应。
    5. 浏览器在响应头中发现Set-Cookie字段,就会将该字段的值保存在内存或者硬盘中。

      Set-Cookie字段的值可以是很多项Cookie,每一项都可以指定过期时间Expires。 默认的过期时间是用户关闭浏览器时。

    6. 浏览器下次给该服务器发送HTTP请求时, 会将服务器设置的Cookie附加在HTTP请求的头字段Cookie中。

      浏览器可以存储多个域名下的Cookie,但只发送当前请求的域名曾经指定的Cookie, 这个域名也可以在Set-Cookie字段中指定)。

    7. 服务器收到这个HTTP请求,发现请求头中有Cookie字段, 便知道之前就和这个用户打过交道了。

    8. 过期的Cookie会被浏览器删除。

    总之,服务器通过Set-Cookie响应头字段来指示浏览器保存Cookie, 浏览器通过Cookie请求头字段来告诉服务器之前的状态。 Cookie中包含若干个键值对,每个键值对可以设置过期时间。

    由于cookie使用明文传输。为了防篡改,所以一般情况下,Cookie中只会放一个Session Id,而Session存储在服务器端。

    session:

    Session 是存储在服务器端的,避免了在客户端Cookie中存储敏感数据。 Session 可以存储在HTTP服务器的内存中,也可以存在内存数据库(如redis)中, 对于重量级的应用甚至可以存储在数据库中。

    我们以存储在redis中的Session为例,还是考察如何验证用户登录状态的问题。

    1. 用户提交包含用户名和密码的表单,发送HTTP请求。
    2. 服务器验证用户发来的用户名密码。
    3. 如果正确则把当前用户对象存储到redis中,并生成它在redis中的ID。

      这个ID称为Session ID,通过Session ID可以从Redis中取出对应的用户对象, 敏感数据(比如authed=true)都存储在这个用户对象中。

    4. 设置Cookie为sessionId=xxxxxx|checksum并发送HTTP响应, 仍然为每一项Cookie都设置签名。
    5. 用户收到HTTP响应后,便看不到任何敏感数据了。在此后的请求中发送该Cookie给服务器。
    6. 服务器收到此后的HTTP请求后,发现Cookie中有SessionID,进行防篡改验证。
    7. 如果通过了验证,根据该ID从Redis中取出对应的用户对象, 查看该对象的状态并继续执行业务逻辑。

    Web应用框架都会实现上述过程,在Web应用中可以直接获得当前用户。 相当于在HTTP协议之上,通过Cookie实现了持久的会话。这个会话便称为Session。

    转载自:https://harttle.land/2015/08/10/cookie-session.html

  • 相关阅读:
    【深度强化学习】Curriculum-guided Hindsight Experience Replay读后感
    【深度学习】perceptron(感知机)
    【深度学习】基础--NumPy
    【RMAN】一些参数温故知新
    初识Kotlin之函数
    初识Kotlin之变量
    编程和英语一起学,每日一词
    SpringBoot注册Windows服务和启动报错的原因
    从Docker 到Jenkins 到Ansible的部署经验
    IDEA 常用配置
  • 原文地址:https://www.cnblogs.com/ceceliahappycoding/p/10538463.html
Copyright © 2011-2022 走看看