js或vue中 如何判断浏览器时关闭还是刷新??

咖啡加糖_ 2021-01-04 09:47:11
目前接到一个需求如下:
SpringMVC的项目部署后,接入了客户的统一认证平台(基于token的方式),需要实现一个功能,在浏览器第一次访问系统主页时,需要执行一个ajax后台操作,如果多次打开页签则不执行,刷新也不执行,但是如果关闭所有页签后再次打开第一个时,需要执行,也就是说每次打开该网站主页并且只有一个页签打开时,需要执行一个后台方法。

目前我准备的做法是:使用localstorage记录打开主页的次数,每次打开一个就增加一个,刷新不做处理,如果关闭一个就再减去一个,这样只能再第一次打开时调用后台方法,

但是目前遇到一个问题,就是无法判断浏览器时刷新还是关闭,网上找了一些,也没有找到准确的做法,目前主要能兼容谷歌、火狐、360等浏览器就行

求教各位!
...全文
3391 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
咖啡加糖_ 2021-01-05
  • 打赏
  • 举报
回复 1
引用 5 楼 小傻哥 的回复:
你细品。 浏览器不关闭,就说明你这个不是第一个打开的标签,也就不需要执行这个操作。 如果你指的操作是统一登录的token,那也已经登录了,不需要强制用户再登录,时效设置好就行了。 如果无论如何都要在用户新访问时操作,那你完全可以从访问来源入手,如果访问来源为空,说明用户输入网址打开的,执行这个操作。 不过,我还是觉得你思路错了。因为我开发这个功能时,就是这样的,浏览器没有关闭,说明并没有退出,也可以手动退出。
感谢再次回复,这个需求是用户提出的(是否合理我们也说了不算),如果浏览器没有关闭(比如打开了其他的页签),只是关闭了我们页面的页签,那么这个时候再次我们页面也是是执行这个操作的,但是此时cookie还在,就不会执行了,
小傻哥 2021-01-04
  • 打赏
  • 举报
回复
你细品。 浏览器不关闭,就说明你这个不是第一个打开的标签,也就不需要执行这个操作。 如果你指的操作是统一登录的token,那也已经登录了,不需要强制用户再登录,时效设置好就行了。 如果无论如何都要在用户新访问时操作,那你完全可以从访问来源入手,如果访问来源为空,说明用户输入网址打开的,执行这个操作。 不过,我还是觉得你思路错了。因为我开发这个功能时,就是这样的,浏览器没有关闭,说明并没有退出,也可以手动退出。
咖啡加糖_ 2021-01-04
  • 打赏
  • 举报
回复
引用 2 楼 qybao 的回复:
这个需求有点问题 token本身有时效吗?还是token是无限期? 有时效的话,如果浏览器一直不关,始终开着第一个页签,那么时效过了怎么重新刷新token? 如果无期限,token被盗问题就更大了。 不过一般这种需求就像1L说的,用cookie,通常加上一个logout机能来删除cookie。
这个token肯定是有失效的,如果失效了,访问我们的系统会拦截到登录页面重新登录,
咖啡加糖_ 2021-01-04
  • 打赏
  • 举报
回复
引用 1 楼 小傻哥 的回复:
你的思路错了。 即使有这种代码,也不能保证浏览器一定会正确执行(假死)。 可以使用cookie,不设置max-age的情况下,页面全部关闭时会删除cookie。 所以只要判断有没有cookie内指定的记录就可以了。
用cooike不能解决这个问题的,如果一格浏览器中打开了其他页面,这个时候关闭我们系统的页面了,cookie还在,但是如果我再次登录到系统还是需要执行这个后台方法的,可是这个时候cookie还在
qybao 2021-01-04
  • 打赏
  • 举报
回复
这个需求有点问题 token本身有时效吗?还是token是无限期? 有时效的话,如果浏览器一直不关,始终开着第一个页签,那么时效过了怎么重新刷新token? 如果无期限,token被盗问题就更大了。 不过一般这种需求就像1L说的,用cookie,通常加上一个logout机能来删除cookie。
小傻哥 2021-01-04
  • 打赏
  • 举报
回复
你的思路错了。 即使有这种代码,也不能保证浏览器一定会正确执行(假死)。 可以使用cookie,不设置max-age的情况下,页面全部关闭时会删除cookie。 所以只要判断有没有cookie内指定的记录就可以了。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧