走进会话

会话用来做什么:

  它是用来维持请求和请求之间的状态。http请求默认是完全无状态的,也就是说,当用户浏览器把一个完整的请求发送到服务器,等到服务器接收完全部的请求,在此之后,用户的浏览器与服务器之间再也没人什么联系。当用户浏览器发送下一个请求,那么这个请求无法与之前的请求关联起来。这样会导致什么后果?以在线商城为例子,用户需要在不同的商品页面中浏览,当把其中一个商品添加到购物车后,然后再去找其他商品并添加到购物车。若采用采用无状态的连接,也就是前后两次请求无法关联起来,购物车里并不包含前一次添加进来的商品。所以你只能在当前请求还没有结束之前把账单结了,也就是一次只能付款一个商品,无法做到一次性付款所有商品。

 

会话的工作原理:

  会话是由服务器或web应用程序管理的某些文件、内存片段、对象或容器,它包含了分配给它的各种不同的数据。可以把它理解为一个可以存储之前请求的空间,服务器会把某个用户的会话保存在本机中,当下一次用户再发送请求到服务器,会把当前的请求与会话中存储的请求关联起来。

  若采用了会话技术,那么在用户浏览器发送第一个请求到服务器,服务器会为该用户开辟一段空间用来保存会话内容,并生成一个唯一的会话ID用来标识该用户。当服务器返回响应时,会在响应段中添加会话ID。接下来,从该用户浏览器发出的每个请求都将包含这个会话ID,当Web应用程序接收到含有会话ID的请求时,它可以通过该ID将现有的会话与当前的请求关联起来。

 

走进会话Cookie:

  它是一种通信机制,可以通过Set-Cookie响应头在服务器和浏览器之间传递任意的数据,并存储在用户计算机中,然后再通过请求头Cookie从浏览器返回到服务器中。

  在JavaEE中会话Cookie的名字默认是JSESSIONID  

  Cookie有哪些特性:

    1.Domain:告诉浏览器将cookie发送到哪个域名中

    2.Path:将cookie发送到某个域名下的某个URL

    3.Expires:定义了Cookie的绝对过期日期

    4.Max-Age:定义了Cookie的存活时间,以秒为单位

    ps:若Cookie中不包含Expires和Max-Age这两个特性,那么该Cookie将在浏览器关闭时被删除

    5.Secure:浏览器只会通过HTTPS发送Cookie。

    6.HttpOnly:只能通过直接的浏览器请求发送cookie,其他技术如JavaScript、Flash将无法发送Cookie

 

如何在请求URL中包含会话ID:

  会话ID需要作为第一个响应返回给用户浏览器,如何生成会话ID?需要把会话ID添加到每个应用程序返回的URL中,包括页面的链接、表单操作以及302重定向。

  可以通过HttpServletResponse接口中的两个方法encodeURL()和encodeRedirectURL()将会话ID内嵌到URL中。任何在链接、表单操作或者其他标签中的URL都将被传入到encodeURL()方法中,然后返回一个正确的、经过编码处理的URL。任何可以传入sendRedirect()中的URL都可以传入encodeRedirectURL()方法中,返回一个正确的、经过编译处理的URL。

 

URL中内嵌会话ID会带来什么后果:

  如果将该URL复制到公共场所,如果恶意用户发现了该链接,可以使用劫持用户的会话。他将可以修改账户地址、获取密码重置链接并终修改密码。

  攻击者通过URL或者检查浏览器的Cookie获得会话ID,然后将含有会话ID的URL发送给目标用户,当用户点击链接进入网站时,它的会话ID就换成了URL中含有的固定ID-----攻击者已经持有该ID。如果用户接着在该会话期间登录网站,那么攻击者也可以登录成功,因为这个会话ID是他分享的,因此他也可以访问用户的账号。这个可以通过禁止在URL中内嵌会话ID或者设置登录后会话迁移(当用户登录时,修改会话ID或者将会话信息复制到新的会话中,并使之前的会话无效)

 

posted @ 2017-12-12 20:47  Aristole  阅读(309)  评论(0编辑  收藏  举报