浅谈java后台处理同名cookie
最近开发过程中遇到了一个同名cookie的问题,目前是提示用户同名cookie,让他们通过自己清除浏览器达到清除同名cookie的目的。因为后台在未知path的情况下是删不了对应的cookie的,只能等他自动过期或者用户自己手动清除浏览器缓存
分析后有两种可能造成同名cookie
1、使用postman等工具写入cookie
2、子项目种了同名cookie(要去定位,去找)
Cookie[] cookies = request.getCookies();
if (ArrayUtils.isNotEmpty(cookies)) {
for (Cookie cookie : cookies) {
String cookieName = cookie.getName();
if (names.contains(cookieName)) {
//抛个异常
throw new MyException("用户:" + userName + " Cookie:" + cookieName + "重复");
}
names.add(cookieName);
}
}
场景如下:其中场景一为本人种的cookie,场景2为未知的cookie
场景 | 1 | 2 |
---|---|---|
域名 | A | A |
path | / | 未知,但不是根路径 |
key | username | username |
value | 123 | 未知 |
我需要在代码逻辑中找到自己种的cookie对应的key和value。
首先要申明一下java后台只能拿到cookie的key和value,其他的值一律拿不到
考虑增删改查是否可行
增
直接pass,没有再加一个cookie的必要
删
我们来看一下cookie的删除是什么样的
Cookie[] cookies=request.getCookies();
for(Cookie cookie: cookies){
cookie.setMaxAge(0);
cookie.setPath(“/”);
response.addCookie(cookie);
}
要setPath才能找到要删除的那个cookie!!!!
cookie的删除是将原来的值设为null
那么问题就来了,我要删cookie也只能删自己的cookie我知道他的path是什么,但是没有办法删除场景2的未知path对应的cookie
pass
改
改其实和删差不多,只是多了一个setValue,改要生效也需要知道cookie的path才行。
pass
查
只剩查了,要好好探索一下,我们要怎么查
-
我从下面那篇文章得知,通过HttpServletRequest取得的Cookie[]cookies数组中同名Cookie排在后面的path更短,也就是更靠近根目录。
目前在火狐上是成立的,那么是可以解决我只想查根目录的cookie的值。但是这种方法不同浏览器的策略是否不同,需要再验证一下。
-
每次自己写入的cookie进行保存,解析RequestContext的时候当有重名情况出现的时候,和自己保存的数据进行比对,选择和自己保存数据相同的那份。
-
要是有更好的查询办法麻烦大家告诉我啦~~