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分钟左右

 

posted @ 2017-08-29 17:02  我的老婆是校花  阅读(332)  评论(0编辑  收藏  举报