我们的产品里有一配置服务(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引起系统不断要求重新登录问题分析的更多相关文章

  1. 电商系统中的商品模型的分析与设计—续

    前言     在<电商系统中的商品模型的分析与设计>中,对电商系统商品模型有一个粗浅的描述,后来有博友对货品和商品的区别以及属性有一些疑问.我也对此做一些研究,再次简单的对商品模型做一个介 ...

  2. Android Cookie共享到WebView避免再次登录(保持登录状态)

    最近在做项目时用到了webview打开指定链接的网页,可已经把webview设置了cookie但始终跳转到登录页面,这明显是cookie没有设置成功导致webview没有将设置好的cookie发送出去 ...

  3. Linux系统文本命令快速登录与退出

    Linux是一个多用户的操作系统,用户要使用该系统,首先必须登录系统,使用完系统后,必须退出系统.用户登录系统时,为了使系统能够识别自己,必须输入用户名和密码,经系统验证无误后方能进入系统.在系统安装 ...

  4. linux系统如何限制远程登录ip

    在Linux系统上限制远程登录的IP,使用系统自带的配置文件. /etc/hosts.allow /etc/hosts.deny 匹配原则  先allow 后deny. 要求: 只允许 192.168 ...

  5. 在Linux系统上限制远程登录的IP

    在Linux系统上限制远程登录的IP,使用系统自带的配置文件. /etc/hosts.allow /etc/hosts.deny 匹配原则  先allow 后deny.

  6. 验证码的设计与记住我存储用户名密码cookie的技术及单选按钮选择登录人身份的实现

    login.jsp页面 <head> <script type="text/javascript" src="js/captcha.js"&g ...

  7. JSP(4)—Cookie创建及简单案例(自动登录)

    Cookie的创建: 创建一个JSP页面,第一次访问时显示没有Cookie,正在创建,再次访问就会自动显示cookie的名称,并设置cookie过期时间 <% //在javaweb规范中使用Co ...

  8. openStack 重新resize时会进行重新调度,可能在本机Resize 扩展资源,也可能存在的情况时 ,新扩展的资源在当前节点不足分配,整个虚拟机将进行迁移调度,进行异机迁移时需要迁移 的两台主机间能使用nova系统用户经passless登录

    openStack 重新resize时会进行重新调度,可能在本机Resize 扩展资源,也可能存在的情况时 ,新扩展的资源在当前节点不足分配,整个虚拟机将进行迁移调度,进行异机迁移时需要迁移 的两台主 ...

  9. Y460 安装ubuntu 12.04系统黑屏,登录界面黑屏

    ubuntu 12.04系统黑屏,登录界面黑屏,但是命令行界面可以登录,也可以正常使用,当时在装CVS,装完重启就这样了,可能是因为前一天装更新时,突然断电导致图形界面损坏,参考他人方法,终于修复,总 ...

随机推荐

  1. python django day 3 页面,自动 跳转,参数传递

    zqxt_views/urls.pypath('', calc_views.index, name='home'), calc/views.pydef index(request): return r ...

  2. (12)模板语言-with

    with的用处 当一个变量特别特别长,可以用with给这个变量重命名 views.py from django.shortcuts import render,HttpResponse def ind ...

  3. Python-random 随机数模块

    random 随机数模块格式: import random 引入随机模块文件 1 import random 2 3 print(random.random())#(0,1)----float 大于0 ...

  4. Go Example--递归

    package main import "fmt" func main() { fmt.Println(fact(7)) } //函数的递归 func fact(n int) in ...

  5. Go Example--switch

    package main import ( "fmt" "time" ) func main() { i := 2 fmt.Print("write ...

  6. 【BZOJ2019】nim

    直播写题这刺激233 原题: 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输. ...

  7. 【java多线程】队列系统之LinkedBlockingQueue源码

    转载:https://blog.csdn.net/tonywu1992/article/details/83419448 http://benjaminwhx.com/archives/ 1.简介 上 ...

  8. jenkins 集成 keycloak 认证

    keycloak 是很不错的sso 工具,当然也有Jenkins 的插件,我们可以使用jenkins 插件,方便用户账户的管理 环境准别 docker-compose version: "3 ...

  9. Big-endian/Little-endian, LSB/MSB

    Least significant byte (LSB) Most significant byte (MSB) Big-endian machines store the most-signific ...

  10. ThinkPHP3.2 where方法的使用

    where方法的用法是ThinkPHP查询语言的精髓,也是ThinkPHP ORM的重要组成部分和亮点所在,可以完成包括普通查询.表达式查询.快捷查询.区间查询.组合查询在内的查询操作.where方法 ...