基于cookie的登陆验证与退出

看到信息里面有这样一条疑问:

是一个关于关于cookie登陆退出的问题。问题原文为:怎么实现退出登陆,页面跳转到登陆页面,前端登陆后,后端返回字段设置cookie 就可以实现身份认证,但是这个cookies 应该是设置了httponly 字段,不允许前端js操作的,那点击退出按钮怎么应该做什么

首先先解决这样一个疑问,就是不论cookie有没有设置httponly属性,登陆或者退出时候的cookie都不应该由js来操作。具体原因后面会说。

网站发送登陆请求之后,在响应头中通过Set-Cookie来设置cookie,浏览器接收到响应后,会将Set-Cookie中的cookie信息存储到浏览器,如图:

此时查看浏览器的application 如图:

这是登陆的情况,那退出呢?这时有些朋友认为,点击退出按钮,或者进行退出操作,直接调用js删除cookie不就可以了吗,一般的项目中是不会这样操作的,删除cookie也是通过后端来实现。既然后端可以通过Set-Cookie设置cookie,那么也应该可以通过Set-Cookie删除cookie,所以一般的项目接口文档中都会有一个退出接口api。

当前端向这个退出api发送请求时,响应头中的Set-Cookie一般会将登陆时设置的cookie(PHPSESSID)的expires属性设置成一个过期时间。这样浏览器解析这个Set-Cookie时就将PHPSESSID删除掉了。

当向这个退出接口发送信息的时候,看看network会响应什么呢,如图:

再看看appliaction的显示结果:

那为什么不可以用前端的js删除cookie呢,这里就涉及到了session信息,当你登陆网站后,后端服务器将一个cookie返回给前端,并且会在后端数据库存储一个cookie,这两个cookie是相同的,每次退出后两个cookie都应该删除,这就需要前端向后端发送一个删除cookie的请求,服务器接受到请求后删除cookie,并在响应头中设置如下信息。

浏览器接受到以上信息,根据expires字段信息判断cookie过期(1970年就过期了),将cookie删除。这样两个cookie就都删除了。

如果只是用前端js将cookie手动清除,后端依然保存着cookie,造成资源浪费,当然还有一些其他的弊端,这里不做赘述。

本文来自企鹅号 - nodejs全栈开发媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据-Hadoop、Spark

Linux NAT网络设置访问外网

1.查看本地实体机的VMNet8的属性, ? 物理机VMNet8信息.png 实体机的网络信息 本地实体机的IP4地址:192.168.92.2 子网掩码...

98860
来自专栏Java后端生活

Linux(十三)磁盘分区、挂载

79130
来自专栏xingoo, 一个梦想做发明家的程序员

记录安装oracle的那些事(三)之oracle Database R2安装

我是参考下面的安装方法: http://www.doc88.com/p-714757764357.html 其中有几个目录没有完全创建...要自己创建一下。...

183100
来自专栏爱撒谎的男孩

Linux使用

53330
来自专栏郭少华

IDEA中Git的使用

6.可以在commitmessage里面写本次提交的详情然后Commit and Push

4.4K50
来自专栏编程

python学习(3)-win7安装python2.7

从现在开始,我们可以进行python实战了,首先本篇介绍在windows 7系统上安装 python2.7。 1、首先可以打开python下载官网:https:...

22760
来自专栏jojo的技术小屋

原 模块化编程之require.js

作者:汪娇娇 日期:2016.5.4 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了。后来,代码越来越多,一个文件不够了,...

30050
来自专栏Python

解决Nginx出现403 forbidden (13: Permission denied)报错的四种方法

我是在在本地用虚拟机中通过yum安装nginx的,安装一切正常,但是访问时报403,

27010
来自专栏Jackson0714

Java环境变量配置

38780
来自专栏流柯技术学院

Linux系统下给非root用户添加sudo权限

1.进入超级用户模式。也就是输入"su -",系统会让你输入超级用户密码,输入密码后就进入了超级用户模式。(也可以直接用root登录);

31130

扫码关注云+社区

领取腾讯云代金券