【java细节】详解如何删除cookie

0x01 背景
最近做项目的登陆登出功能,需要实现单点登录和单点登出,验证服务器是一个庞大的第三方开源软件,软件的文档也不太全面,并没有细致的讲解登出方式,导致登出用重定向返回应用后还是登陆状态,无奈之举要么在服务器端修改session失效时间,要么看看登陆时候是否携带了验证码,如果带了,删除了看能不能实现登出,毕竟找不到验证服务器的登出url。

0x02 cookie无法清除
首先需要明白cookie的属性不仅仅只有name和value,要删除cookie也不是仅仅指定cookie的name就可以删除,还有domain域和path属性,maxage()表示持续时间。如下图所示,可以得到的属性很多。
这里写图片描述
明白以上的知识点后,就会发现,要删除cookie,应该要指定完整的路径去删除;但我遇到的问题是,查看cookie的domain域和path属性时,其值均为null,那是不是就不用指定了呢?答案肯定不是。为null时也需要指定,只是指定path时候为“/”。
这里写图片描述

0x03 JAVA代码删除cookie
删除cookie在前端界面删除,让其不带入request。前端界面可写”<% %>”标记的java代码,也可以写js代码,并且两种方式都可以删除。Java删除代码很简单,将如下代码放入界面body标签内部即可

<%
                Cookie killMyCookie = new Cookie("cookiename1", null);
                killMyCookie.setMaxAge(0);
                killMyCookie.setPath("/");
                response.addCookie(killMyCookie);
                Cookie killMyCookie1 = new Cookie("cookiename2", null);
                killMyCookie1.setMaxAge(0);
                killMyCookie1.setPath("/");
                response.addCookie(killMyCookie1);
            %>

这种方法确实可以删除cookie,可是他的效果是界面加载后就删除了,并不是我想要的点击某个按钮后再删除,因为当用户并没有点击登出,而是到了这个界面后又返回了,不可能让其自动登出了吧!
只能想办法将其写成函数,然后点击调用。可是JAVA代码和JS代码却不能很好的通信,那就看看能不能用JS代码来删除cookie,然后将JS代码写成function来调用。

0x04 JS代码删除cookie
JAVA代码删除cookie的原理是新建一个同名,值为null的cookie,用这个cookie将request域里面的指定cookie覆盖;JS删除cookie的原理是将cookie的失效时间改变成过去的值。网上很多人的博客到处转载,却大部分是如下形态

function delCookie(name)
{
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(name);
if(cval!=null)
document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}

按我之前对cookie的理解,既然我的cookie的domain域和path属性均为null,我不指定path,只指定name属性应该也可以自动指向我要删除的cookie。可是我用以上的代码试了一百遍都删除不了。
于是指定path路径再次尝试就删除了。代码如下:

<script type="text/javascript">
    function logoutJS() {
        var date = new Date();
        date.setTime(date.getTime() - 10000);
        document.cookie = "cookiename" + "=v; expire=" + date.toGMTString()
                + "; path=/";
    }
</script>
<form action="logout">
            <input type="submit" value="Logout" onclick="logoutJS()">
</form>

0x05 总结
前端cookie删除的方法,写java代码和JS代码在运行时间上有所不同,需合理选择。删除cookie时候,即使path和domain域是null,最好也进行指定,防止出现各种cookie删除不掉的bug。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值