segmentfault无登陆进入 在一个界面登陆后 其他界面提示 已经登陆 需要重新加载

这个怎么实现的
求技术关键词

http://static.segmentfault.com/build/qa/js/question.2613f2a2.js

因为文件是经过压缩过的, 所以我只说一下主要的部分:
根据不同的浏览器对于当窗口获得焦点时的事件名称不同, 绑定相应的窗口获得焦点的事件,
然后在事件触发的时候 发 ajax 检测当前的登陆状态, 如果是由 未登陆 变为 登陆状态, 则显示你所看到的那句话. 如果是登陆状态, 还是会发 ajax 检测当前的登陆状态, 并执行相应的js, 并且设置计时器setInterval 每隔60秒检测一次登陆状态.

在进入页面的时候, 后端会在页面中会输出

//登陆状态时输出的内容
<meta name="userId" value="1030000000334890" id="SFUserId" /> //未登陆状态时输出的内容
<meta name="userId" value="" id="SFUserId" />

相关的JS代码:

 function a { $.getJSON"/api/user/stat", functione { if 0 === e.status { var t = $"title"; e.data.events > 0 ? e.data.events > 99 && e.data.events = "99+", $"#messageCount".siblings".has-unread__count".remove, $"#messageCount".after<span class="has-unread__count"> + e.data.events + "</span>", $"#m-messageCount".texte.data.events, $".mobile-menu__unreadpoint".show, t.text/^\d+[+]?/.testt.text ? t.text.replace/^\d+[+]?/, "" + e.data.events + "" : "" + e.data.events + "" + $"title".text : 0 === e.data.events && $".has-unread__count".remove, t.textt.text.replace/^\d+[+]?/, "", 0 !== e.data.drafts && $"#draftCount .badge".remove, $"#draftCount".append<span class="badge"> + e.data.drafts + "</span>", 0 !== e.data.invites && $"#inviteCount .badge".remove, $"#inviteCount".append<span class="badge"> + e.data.invites + "</span>" } } } var r = {_: window.SF.token,staticUrl: window.SF.staticUrl,userId: $"#SFUserId".attr"value",userRank: $"#SFUserRank".attr"value",getMessage: a,login: t.login || i}; var s, l; "undefined" != typeof document.hidden ? s = "hidden", l = "visibilitychange" : "undefined" != typeof document.mozHidden ? s = "mozHidden", l = "mozvisibilitychange" : "undefined" != typeof document.msHidden ? s = "msHidden", l = "msvisibilitychange" : "undefined" != typeof document.webkitHidden && s = "webkitHidden", l = "webkitvisibilitychange", $"body".prepend<div class="alert alert-warning topframe js-alert"><span class="content"></span><button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button></div>, $document.onl, function { document[s] ? clearIntervalo : r.userId ? a, o = setIntervala, 6e4 : $.getJSON"/api/user/stat", functione { 0 == e.status && $"body".addClass"have-notify", $".js-alert".find".content".html您已登录,请 <button class="btn btn-warning btn-xs" type="button" onclick="location.reload">重新加载</button>.parent.show } }

cookie、localStorge 都可以实现啊;

判断登录的应该是统一的方法吧,登录后把一个标识写入 cookie或localStorge就可以了。

tab 页激活时检测是否已经有 session 的数据,如果没有,就发一条消息的接口请求看看是不是需要登陆的提示,没有则显示重新加载的提示。

该答案已被忽略,原因:test mail notice

发表评论

电子邮件地址不会被公开。 必填项已用*标注