Cookie 跨越问题

思考:做的前后端分离的项目,但是前后端也只是各一个服务器,但是登录是使用了token验证方式,所以就产生了疑问,为什么不用传统的session方式?因为后台只有一个,肯定不会有session不一致问题。但是实践下来,sessionid会丢失,接下来分析一下原因。

Cookie 的原理:http://blog.csdn.net/gavin_john/article/details/51352114

再描述一下:

  • 浏览器发送http请求;
  • 客户端创建cookie,通过Http响应头的Set-Cookie项返回写回到浏览器;
  • 再次请求时,浏览器会自动带上该Web应用的cookie(cookie保存时会根据域和地址保存),通过Http请求头的Cookie字段带上;
  • 后端可以根据需要来读取cookie;

如果不设置过期时间,则该cookie再浏览器关闭时就不存在了,这种生命期为浏览会话期的cookie被称为会话cookie,会话cookie一般不保存在硬盘上而是内存中。存储在硬盘上的cookie可以在不同的浏览器进程间共享,而内存中的cookie,不同的浏览器有不同的处理方式。

Session原理:http://blog.csdn.net/gavin_john/article/details/51376364

  • 浏览器第一次请求Web服务,服务器会创建一个session保存到内存中 ,并且获取到sessionid写入cookie中,不设置过期时间(会话cookie);
  • Http响应头Set-Cookie字段的cookie值写到浏览器中;
  • 下次请求时Http请求头通过cookie字段自动带上sessionid,然后服务器根据sessionid找到之前创建的session。

我所遇到的问题描述:
前后端分离,前段使用nignx部署的静态服务器,后端是java服务器,每次请求时前端都不带Cookie,导致无法识别Session,而且响应的Set-Cookie字段传递的JSESSIONID都不一样:


Cookie 跨越问题_第1张图片

从图中看出每次http请求并没有自动带上该应用的cookie,这就跟cookie的存储有关系了

Cookie的保存:http://blog.csdn.net/luka2008/article/details/38385703/
cookie保存name:value的同时,会同时保存对应的domain和path
domain告诉浏览器当前要添加的cookie的域名归属,如果没有明确指明则默认为当前域名,比如我访问的地址为http://192.168.1.233:8206/selfmark/list.html ,则domain为192.168.1.233
Path告诉浏览器当前要添加的cookie的路径归属,没有指明则默认为当前路径,以上例子的路径为/selfmark ,

而在请求时,请求的服务器地址为http://192.168.1.229:8206,与刚刚保存的cookie域不一致,所以一直无法匹配到对应的cookie,后台无法获取到sessionid,所以会一直重新生成session,返回新的sessionid。

你可能感兴趣的:(Cookie 跨越问题)