一次cookie引起系统不断要求重新登录问题分析
我们的产品里有一配置服务(tomcat),采用ajax来通信交互
但是最近频频发现登录后马上弹出要重新登录的情况,一开始以为是cookie没有带上导致session找不到,后来问题依旧,查看浏览器cookie,竟然发现我们的配置服务web站点上有3个cookie, 而且path不一样,一个path是/跟路径,另外两个是/conf/ajax1, /conf/ajax2,而且里面的cookie值jsessionid不一样
why?
我们从开始登录复盘一下,刚开始登录后产生/跟的cookie,这点没问题,但是path 的/conf/ajax1,/conf/ajax2 cookie是如何产生的?当我们的session超时过期后,再尝试直接去访问/conf/ajax1/a就产生path为/conf/ajax1的cookie了,但是我们同时也发现/跟的cookie的sessionid也被重置了,why?我们看了看单独访问/conf/ajax1/a接口的时候的response header , 竟然有2个set-cookie
Set-Cookie:JSESSIONID=2C1C994BEAF199EA12DDE5585DA2F6CE;path=/;HttpOnly
Set-Cookie:JSESSIONID=2C1C994BEAF199EA12DDE5585DA2F6CE
第二个Set-Cookie的path就是当前访问url目录的路径/conf/ajax1 tomcat自身会返回一个Set-Cookie:JSESSIONID=2C1C994BEAF199EA12DDE5585DA2F6CE, 但第一个Set-Cookie是如何产生的,翻看我们的代码果然有response.addCookie(cookie),原来是这里导致了多个cookie
我们再用另外一种方式来模拟复盘一下之前的问题,先清空cookie, 直接浏览器访问/conf/ajax1/a 接口,产生 path为/ , /conf/ajax1 两个cookie, 然后删除path 为/ 的cookie, 再浏览器里直接访问 /conf/ajax2/a 接口,又新产生了/和 /conf/ajax2两个cookie,加上之前的/conf/ajax1
一共3个cookie 补充:
如果我们先直接浏览器访问/conf/ajax1/a 接口,产生 path为/ , /conf/ajax1 两个cookie后,又直接访问/conf/ajax2/a 会不会产生/conf/ajax2 的cookie了?答案是不会, 因为访问一个地址的时候,浏览器会查看是否有这个地址所包含的path的cookie,如果有就携带,我们这里访问/conf/ajax2/a
地址包含了/ ,所以跟path的cookie会被携带, 如果我们访问的是/conf/ajax1/xx/b 这个地址,因为包含了/和/conf/ajax1 两个path, 所以这两个cookie都会被携带。
一次cookie引起系统不断要求重新登录问题分析的更多相关文章
- 电商系统中的商品模型的分析与设计—续
前言 在<电商系统中的商品模型的分析与设计>中,对电商系统商品模型有一个粗浅的描述,后来有博友对货品和商品的区别以及属性有一些疑问.我也对此做一些研究,再次简单的对商品模型做一个介 ...
- Android Cookie共享到WebView避免再次登录(保持登录状态)
最近在做项目时用到了webview打开指定链接的网页,可已经把webview设置了cookie但始终跳转到登录页面,这明显是cookie没有设置成功导致webview没有将设置好的cookie发送出去 ...
- Linux系统文本命令快速登录与退出
Linux是一个多用户的操作系统,用户要使用该系统,首先必须登录系统,使用完系统后,必须退出系统.用户登录系统时,为了使系统能够识别自己,必须输入用户名和密码,经系统验证无误后方能进入系统.在系统安装 ...
- linux系统如何限制远程登录ip
在Linux系统上限制远程登录的IP,使用系统自带的配置文件. /etc/hosts.allow /etc/hosts.deny 匹配原则 先allow 后deny. 要求: 只允许 192.168 ...
- 在Linux系统上限制远程登录的IP
在Linux系统上限制远程登录的IP,使用系统自带的配置文件. /etc/hosts.allow /etc/hosts.deny 匹配原则 先allow 后deny.
- 验证码的设计与记住我存储用户名密码cookie的技术及单选按钮选择登录人身份的实现
login.jsp页面 <head> <script type="text/javascript" src="js/captcha.js"&g ...
- JSP(4)—Cookie创建及简单案例(自动登录)
Cookie的创建: 创建一个JSP页面,第一次访问时显示没有Cookie,正在创建,再次访问就会自动显示cookie的名称,并设置cookie过期时间 <% //在javaweb规范中使用Co ...
- openStack 重新resize时会进行重新调度,可能在本机Resize 扩展资源,也可能存在的情况时 ,新扩展的资源在当前节点不足分配,整个虚拟机将进行迁移调度,进行异机迁移时需要迁移 的两台主机间能使用nova系统用户经passless登录
openStack 重新resize时会进行重新调度,可能在本机Resize 扩展资源,也可能存在的情况时 ,新扩展的资源在当前节点不足分配,整个虚拟机将进行迁移调度,进行异机迁移时需要迁移 的两台主 ...
- Y460 安装ubuntu 12.04系统黑屏,登录界面黑屏
ubuntu 12.04系统黑屏,登录界面黑屏,但是命令行界面可以登录,也可以正常使用,当时在装CVS,装完重启就这样了,可能是因为前一天装更新时,突然断电导致图形界面损坏,参考他人方法,终于修复,总 ...
随机推荐
- 【BZOJ1202】【HNOI2005】狡猾的商人
查分约束好,好写好调好AC! 原题: 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1, ...
- prufer数列
涨姿势---prufer数列 一. 简介 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2.它 ...
- Django之JsonResponse
JsonResponse 对象: class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=No ...
- Centos7下安装部署oracle数据库方法及问题汇总
目标:在centos7上配置oracle数据库服务器,并在win7上面使用pl/sql成功访问该oracle数据库 系统环境: 服务器:centos7 64位 客户端:win7 64位 注意cneto ...
- Understanding Complex Event Processing (CEP)/ Streaming SQL Operators with WSO2 CEP (Siddhi)
转自:https://iwringer.wordpress.com/2013/08/07/understanding-complex-event-processing-cep-operators-wi ...
- Spring事务管理机制的实现原理-动态代理
之前在做项目中遇到spring无法进行事务代理问题,最后发现是因为没有写接口,原因当时明白了,看到这篇文章写的清楚些,转过来 我们先来分析一下Spring事务管理机制的实现原理.由于Spring内置A ...
- Primitives vs Objects
这里首先我们要了解什么是primitives 和 objects 其实理解起来很简单. 如果我们懂.NET开发就会知道C#中的值类型和引用类型. primitives variables contai ...
- CSS如何实现”右部宽度固定,左部自适应“的布局
吃过晚饭后,开始刷前端笔试题,却遇到了一道CSS难题——使用CSS实现左部自适应.右部固定宽度为200px的布局.当时第一眼看到题目时,以为只是一道很简单的题目.不就是定义两个左浮动的div,右部的宽 ...
- MySQL 中,\g和\G的作用
MySQL 中,\g和\G的作用: \g 的作用是 go (\g) Send command to mysql server. \G 的作用是将查询到的结果,每行显示一个字段和字段值,方便查看 ego ...
- Springboot技术点汇总
1. Springboot+MyBatis+druid 在启动类上面,添加注释@Configuration以及@ImportResource(location={"classpath:con ...