会话(Session)概述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cjmust/article/details/83580717

为什么要使用会话(Session)

会话用于维持请求和请求之间的状态——HTTP请求自身是完全无状态的,从服务器的角度来说,一个请求结束之后服务器和客户端就不再有任何联系。

会话使得系统能够以某种方式“记住”用户。

会话存储在服务端。

通常来说,会话会被赋予一个随机生成的字符串,称为会话ID(SessionID)。第一次创建会话时,SessionID会作为响应的一部分返回到用户浏览器中,接下来从该用户浏览器中发出的请求都会通过某种方式包含该会话ID,当服务端接收到含有会话ID的请求时,它可以根据该会话ID将会话与当前的请求关联起来。

目前有两种方式可以将会话ID从服务端(C)返回到客户端(B)中:cookie和URL重写


cookie

Http cookie是一种通信机制,可以通过Set-Cookie响应头在服务器和浏览器之间传递任意数据,并存储在客户端当中,然后再通过请求头中的Cookie从浏览器返回到服务端当中。
Cookie有多个特性,如域名、路径、过期日期、最大生命周期、安全标示或HTTP的标志。

  • Domain(域名)将告知浏览器应该讲cookie发送到那个域名中
  • Path将cookie限制在某个域的特定URL中,每次浏览器发起请求时,它都会匹配该域和路径的所有cookie,然后将cookie随着请求一起发送到服务器
  • Expires定义了cookie的绝对过期日期,如果过期日期是过去,则浏览器会立即删除他
  • Max-Aeg与上一个互斥定义了cookie在过期之前所需的秒数
  • 如果浏览器不包含Expires和Max-Age,则会在浏览器关闭时删除cookie
  • Secure(不需要有值),如果有该属性,则浏览器只会通过HTTPS发送cookie
  • HttpOnly会把cookie限制在直接的浏览器请求中,其他技术如js和Flash将无法访问cookie

在JavaEE应用服务器中,cookie的名字默认为JSESSIONID


url中的会话ID

JEE中,会话ID被添加到URL的最后一个路径的矩阵参数中,通过这种方式来分离查询字符串参数和会话ID,使其不相互冲突,如
http://www.baidu.com/happy;JSESSIONID=XxxxXxxxxxxX?username=1111&pwd=2222

猜你喜欢

转载自blog.csdn.net/cjmust/article/details/83580717