浏览器如果不用 Cookie,是不是就没办法做到“关闭浏览器再重新打开就要重新登陆”了?

2020-09-04 18:41:06 +08:00
 mitu9527

传统的网站可以使用“会话 Cookie”,如果浏览器关闭,这种 Cookie 就会过期,所以关闭浏览器后再打开该网站就要重新登陆。

如果换成前后端分离,并且因为跨域和部分客户端不支持 Cookie 导致不能使用 Cookie 的话,此时浏览器好像并没有什么办法能做到“关闭浏览器再重新打开就要重新登陆”,是不是这样呢?还是说有什么办法可以做到?

4188 次点击
所在节点    程序员
33 条回复
mitu9527
2020-09-04 19:01:23 +08:00
@javalaw2010 感觉有可能,postMessage ?坐等专业前端给与解答。
crclz
2020-09-04 19:01:39 +08:00
可以以 localStorage 为存储,实现 session 级别的存储。
在 localStorage 里面存储: key=accesstoken, value 包含 2 个字段,一个是 lastTouch,一个是 token 。

每 1 秒执行一下 touch 函数。touch 函数的行为:如果 now - lastTouch > 3 sec,则删除'accesstoken'对应的数据。否则就更新 lastTouch 。
mitu9527
2020-09-04 19:06:31 +08:00
@wanguorui123 我刚才去网上搜了一下,“如果您重载页面,也会触发 unload 事件”,那刷新页面也会清空凭据?
anguiao
2020-09-04 20:55:50 +08:00
可以借助 localStorage 和 storage 事件,实现跨标签页共享 sessionStorage 。
yulon
2020-09-05 19:06:07 +08:00
以前有家 StartSSL 可能想炫技吧,是用证书登陆的,然后喜闻乐见的是,买的证书一年半载才需要续,每次要续的时候,如果重装过系统或浏览器,老是忘记登陆证书放在哪里了
o0
2020-09-05 23:52:19 +08:00
多年前的网站会把 token 放到地址栏里面。
namelosw
2020-09-06 01:26:02 +08:00
unload 可以,清楚 localStorage 是个同步操作所以大部分时候是好用的。但是并完全不可靠,毕竟可以拔电源。
zhugefubin
2020-09-06 11:48:48 +08:00
做个本地的定时,记录时间,时间间隔超过一定的时间就重新登录
mitu9527
2020-09-06 12:14:11 +08:00
@zhugefubin 如果是这种,哪里还需要本地做,直接 Token 中加过期时间了。
marcong95
2020-09-06 22:47:36 +08:00
你要关闭浏览器 /页面 /app 之后清除 token 的话,你完全不用任何处理,找个全局变量放起来就行了吧。

只有你需要考虑下次打开维持登录状态才要考虑 token 的持久化吧
lscexpress
2020-09-07 10:20:31 +08:00
websocket,断开连接就清除用户信息。
可以做到闭浏览器再重新打开就要重新登陆,但刷新也变得需要重新登录了,哈哈,没想到吧。
但也不是没办法解决,需要你会 chrome 应用开发。这样子你的成本会变很高,去实现一个需求。
我盲猜你是新人,因为新人不会在技术和业务之中需求平衡点,简单点来说就是怼产品的奇葩需求。
zhuweiyou
2020-09-07 10:39:32 +08:00
sessionStorage 关闭浏览器会自动清掉
alertZ
2020-09-07 11:33:11 +08:00
用 sessionStorage 。我在多页面情况下使用这个并没有出现啥特殊情况。当浏览器关闭后重新进入就需要重现登录了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/704306

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX