zoukankan      html  css  js  c++  java
  • Session 和 Cookie

    1. HTTP是无状态协议?
      HTTP无状态协议,是指协议对于事务处理没有记忆能力。同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。
      无状态,意味着如果后续处理需要前面的信息,则它必须重传。这样可能导致每次连接传送的数据量增大。但是另一方面,在服务器不需要先前信息时它的应答就较快。
      因此在web应用开发里就出现了保持http状态的技术:一个是cookie技术,另一种是session技术。

    2. 什么是Cookie?
      Cookie实际上是一小段的文本信息。
      客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie,客户端浏览器会把Cookie保存起来。
      当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
      服务器还可以根据需要修改Cookie的内容。Cookie的内容主要包括:名字,值,过期时间,路径和域。

    3. 服务端怎么向客户端颁发Cookie?
      客户端第一次请求服务器的时候,服务器的响应头中会有一个 Set-Cookie: JSESSIONID=0000581f4j5s8Y7fL1gKZ5NpavO:17tvfoc18;。
      Set-Cookie由服务器发送,它包含在响应体的头部中。它用于在客户端创建或更新Cookie。

    4. 客户端怎么携带着Cookie访问服务器?
      客户端发送请求时会自动在请求头上添加:Cookie:JSESSIONID=0000581f4j5s8Y7fL1gKZ5NpavO:17tvfoc18;(客户端第一次拿到的SessionID)
      只有cookie的domain和path与请求的URL匹配才会发送这个cookie。


    5. 什么是Session?
      客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

    6. Session在何时创建?
      在服务器端程序运行的过程中创建的。在Java中是通过调用HttpServletRequest的getSession(true)方法创建的。
      在创建了Session的同时,服务器会为该Session生成唯一的SessionId,而这个SessionId在随后的请求中会被用来重新获得已经创建的Session。
      session的实现机制都是web容器里内部机制。

    7. 会话是怎么保持的?
      在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有SessionId。
      当客户端再次发送请求的时候,会将这个SessionId带上,服务器接受到请求之后就会依据SessionId找到相应的Session,从而再次使用之。正式这样一个过程,用户的状态也就得以保持了。

    8. Session在什么时候删除?
      超时;程序调用HttpSession.invalidate();程序关闭;

    9. Session存放在哪里?
      一般存放在服务器端的内存中。不过session可以通过特殊的方式做持久化管理(memcache,redis)。

    10. Session的id是从哪里来的?
      当客户端第一次请求session对象时候,服务器会为客户端创建一个session,并将通过特殊算法算出一个session的ID,用来标识该session对象

    11. Session会因为浏览器的关闭而删除吗?
      不会,Session只会通过上面提到的方式去关闭。
      浏览器关闭只是把sessionId给清除了,所以再次打开浏览器并请求服务器,你的登录状态无法找到,因此你需要重新登录。
      一般情况下,浏览器如果不刷新或者不重新请求的话,服务器一般会缓存session数据20分钟左右

  • 相关阅读:
    knockout之ko if绑定和ifnot绑定
    inline-block去掉空白距离的方法
    DOM
    $(document).ready()与window.onload的区别
    white-space: nowrap
    商品列表属性过滤
    for循环与for in循环
    表单验证
    表单验证四个步骤
    ID和Name的区别
  • 原文地址:https://www.cnblogs.com/lishuxue/p/7449197.html
Copyright © 2011-2022 走看看