|
@@ -0,0 +1,45 @@
|
|
|
+/**
|
|
|
+ * 浏览器关闭后下次打开自动退出(sessionStorage 哨兵方案)
|
|
|
+ * 仅操作本地存储,不影响任何现有流程;不做路由跳转
|
|
|
+ */
|
|
|
+(function () {
|
|
|
+ var SESSION_SENTINEL_KEY = '_browserSessionAlive';
|
|
|
+
|
|
|
+ function performLogoutIfNeeded() {
|
|
|
+ try {
|
|
|
+ var hasToken = !!localStorage.getItem('token');
|
|
|
+ var hasSentinel = sessionStorage.getItem(SESSION_SENTINEL_KEY) === '1';
|
|
|
+
|
|
|
+ // 若检测到已登录且没有哨兵,说明上次是关闭浏览器 → 本次先安全登出
|
|
|
+ if (hasToken && !hasSentinel) {
|
|
|
+ localStorage.clear();
|
|
|
+ // 自动跳转到登录页;若当前已在登录页则不跳
|
|
|
+ try {
|
|
|
+ var path = (window && window.location && window.location.pathname) || '';
|
|
|
+ if (path.indexOf('/thmz/login/view') === -1) {
|
|
|
+ window.location.href = '/thmz/login/view';
|
|
|
+ }
|
|
|
+ } catch (e2) {}
|
|
|
+ }
|
|
|
+
|
|
|
+ // 为本次会话设置哨兵,确保刷新/同域导航不误判
|
|
|
+ sessionStorage.setItem(SESSION_SENTINEL_KEY, '1');
|
|
|
+ } catch (e) {
|
|
|
+ // 静默处理,绝不影响正常流程
|
|
|
+ if (window && window.console) {
|
|
|
+ console.warn('auto-logout-on-close init error:', e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (document.readyState === 'complete' || document.readyState === 'interactive') {
|
|
|
+ performLogoutIfNeeded();
|
|
|
+ } else {
|
|
|
+ window.addEventListener('load', function onLoad() {
|
|
|
+ performLogoutIfNeeded();
|
|
|
+ window.removeEventListener('load', onLoad);
|
|
|
+ });
|
|
|
+ }
|
|
|
+})();
|
|
|
+
|
|
|
+
|