老师你好,关于 cookie 的问题

老师你好,关于 cookie 的问题

服务端配置session

const session = require("koa-generic-session")
app.keys = ["df4a54f5"]
app.use(session({
	cookie: {
		path: '/',
		httpOnly: true,
		masAge: 24 * 60 * 60 * 1000
	}
}))

问题

1、Vue 中设置 “路由守卫”,访问其他页面前要先登录,所以会先跳转到登录页面;
2、当用户在登录界面输入用户名和密码,点击登录后,服务端连接数据库验证用户名和密码正确,返回数据 errno: 0 表示登录成功并在浏览器中设置了 cookie;
3、但是因为服务端配置了 httpOnly: true,所以所设置的 cookie 只允许服务端操作,这样的话,前端就无法设置和获取该 cookie,那前端要如何进行“已经登录”的判断?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,设置httponly后,前端是没法通过cookie判断用户是否登录的,因此我们采取的是“利用本地缓存”判断用户是否登录。具体如下:

用户登录后,会将登录信息保存到本地缓存中:

https://img1.sycdn.imooc.com//climg/613af08f0926b1da07750421.jpg

然后在路由守卫中,会从本地缓存中获取登录信息:

https://img1.sycdn.imooc.com//climg/613af0f509d3c7ea08650215.jpg

如果获取到了,则用户登录了,否则没登录。

祝学习愉快!

  • 慕的地9277935 提问者 #1

    老师你好,因为 cookie 是有设定过期时间,而 localStorage 是永久的(除非手动删除)。假如 cookie 过期,服务端是需要重新登录,但是客户端因为 localStorage 里的登录状态永远都是"已登录"状态,所以不会再跳转到登录页面让用户登录,这样假如查寻订单或创建地址会无法实现。

    2021-09-10 15:48:08
  • 好帮手慕久久 回复 提问者 慕的地9277935 #2

    同学你好,的确是存在这个问题,由于我们只是简单实现一下登录功能,所以并没有考虑这么多。可以考虑在登录成功后,我们自己(前端人员)单独在cookie中保存一个状态,比如document.cookie="login=true;max-age=xxx",然后路由中获取我们自己保存的cookie,这样应该可以解决问题,同学可以尝试一下。

    祝学习愉快!

    2021-09-10 16:13:50
  • 慕的地9277935 提问者 回复 好帮手慕久久 #3

    老师你好,请问实际工作中会使用这一种方式吗?或者还有其他的解决方案吗?

    2021-09-12 10:58:25
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师