会话技术

使用会话维持状态

一、需要会话的原因

当同一个用户的多个请求之间需要进行对话或者数据共享的时候,就需要一种桥梁,将不同的请求连接起来。会话良好的解决了这个问题。会话的作用就是维持请求与请求之间的状态。HTTP请求是无状态的。可以将会话比喻成购物的时候用的篮子,连接两个会话。

二、会话理论基础

  

会话会被赋予一个会话ID,第一次创建会话时,ID将会作为相应的一部分返回到用户浏览器中,接下来从改用户浏览器中发出的请求都将通过某种方式包含该回话ID,通过ID将现有会话和当前请求关联起来。

三、如何将会话ID从服务器返回到浏览器中并在之后的请求中包含该ID(COOKIE,URL重写)

       1、HTTP cookie(保存在客户端)

可以通过Set-Cookie相应头在服务器和浏览器之间传递任意的数据,并存储在用户计算机中。每一次浏览器发出请求时,它都将找到匹配该域名和路径的所有cookie,然后将cookie随着请求一起发送到服务器。

Cookie的几个特性:

①Domain:将cookie发送给那个域名。

②Path:限制在相对于域名的某个特定URL中,通过path来确定请求的时候是否携带该cookie,当请求路径中如果包含该cookie的path,则会带着这个cookie,这里的path不是cookie在客户端的存储路径,而是服务器给的。

③Expires:cookie的过期时间。

④Max-Age:cookie的保存时长。  如果不设置③和④将在浏览器关闭的时候删除

⑤Secure:只能通过HTTPS发送。

默认名字:JSESSIONID cookie没有过期时间,当浏览器关闭时自动过期。

 

  

       存在的问题:浏览器有可能禁止cookie的访问。

       ②URL重写

将会话ID添加到URL的最后一个路径段的矩阵参数中,将会话ID内嵌在URL       可避免使用cookie,但是,必须将会话ID内嵌在应用程序的所有URL中。浏览器并不会意识到会话ID的的存在。服务器将重写所有URL使之内嵌会话ID。

HttpServletResponse接口定义了两个可以重写URL的方法:encodeURL和encodeRedirectURL,他们将在必要的时候把会话ID内嵌在URL中。

       3、session(存储在服务器端)

        Session与cookie的区别,session是存储在服务器端的,通过会话ID来识别是那一个用户发来的请求,从而进行会话关联,在客户端第一次请求服务器的时候ID自动生成并以cookie的形式发送到客户端。Session的应用还要依赖cookie。

         如果没有获取session服务器不会返回session id       

如果没有session id或者session id 找不到相对应的session对象将重新创建session id并放在cookie中。

四、会话的漏洞

       1、复制并粘贴错误。

将URL复制粘贴到公用网站中,URL中可能会包含会话ID,如果在会话结束之前别人点击链接访问网站,会认为是同一个人,这样就有可能造成信息泄露。Cookie相对安全。

       2、会话固定

              被攻击者使用了含有会话ID的URL。和复制粘贴错误类似。

              避免方法:禁止在URL中内嵌会话ID,在登陆后采用会话迁移。

       3、不安全的cookie

中间人攻击(MitM),通过抓包。攻击者观察客户端和浏览器交互的请求或响应,从中获取信息。

解决方法:Secure标志,告诉浏览器只能通过HTTPS传输cookie。缺点,必须一直使用HTTPS否则会话会丢失(不在传递cookie)。


猜你喜欢

转载自blog.csdn.net/qq_32270067/article/details/79483236