`
rensanning
  • 浏览: 3552553 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38217
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607590
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682773
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89527
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:402129
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69759
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91834
社区版块
存档分类
最新评论

Github跨tabs/windows检测用户登录状态

 
阅读更多
访问 Github 网站时,如果多个 Window 或 Tab 同时访问 github.com,在任何一个页面做登录或登出处理,其他页面会立即提示用户已经登录或登出,需要重新加载页面。

(1)操作演示
同时2个窗口打开github.com


在其中一个窗口登录用户


另外一个窗口显示需要Reload


刷新窗口后


在一个窗口做登出处理,另外一个窗口也会提示需要Reload


(2)代码分析
浏览器右键查看源代码可以看到以下代码,其中"d-none"就是控制是否显示div的。
  <div class="js-stale-session-flash stale-session-flash flash flash-warn flash-banner d-none">
    <svg aria-hidden="true" class="octicon octicon-alert" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M8.865 1.52c-.18-.31-.51-.5-.87-.5s-.69.19-.87.5L.275 13.5c-.18.31-.18.69 0 1 .19.31.52.5.87.5h13.7c.36 0 .69-.19.86-.5.17-.31.18-.69.01-1L8.865 1.52zM8.995 13h-2v-2h2v2zm0-3h-
2V6h2v4z"/></svg>
    <span class="signed-in-tab-flash">You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span>
    <span class="signed-out-tab-flash">You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span>
  </div>



查看源代码可以看到页面总共引入了2个JavaScript文件:
<script crossorigin="anonymous" integrity="sha256-LrSxxxxx" src="https://assets-cdn.github.com/assets/frameworks-2ebxxxxx.js"></script>
<script async="async" crossorigin="anonymous" integrity="sha256-izZxxxxx" src="https://assets-cdn.github.com/assets/github-8b3xxxxx.js"></script>


继续查看第二JavaScript文件并搜索"js-stale-session-flash",可以找到以下代码,可见是通过监听Storage数据变更StorageEvent事件后是否存在logged-in来判断的!
window.addEventListener("storage",function(e){if(e.storageArea===localStorage&&"logged-in"===e.key&&e.newValue!==a){a=e.newValue;var n=document.querySelector(".js-stale-session-flash");r["default"](n instanceof HTMLElement,"Flash element must exist and be an HTMLElement"),n.classList.toggle("is-signed-in","true"===a),n.classList.toggle("is-signed-out","false"===a),n.classList.remove("d-none"),



继续在第二JavaScript文件里搜索"logged-in",可以看到以下代码,可见根据head里<meta name="user-login" content="">的content的值来判断的,有值时为true。有值的情况下是:<meta name="user-login" content="rensanning">
!function(){var e=document.querySelector("meta[name=user-login]");if(e instanceof HTMLMetaElement){var n=e.content,a=String(!!n.length);try{localStorage.setItem("logged-in",a)}catch(i){return}



总结一下:监听LocalStorage的StorageEvent事件!

StackOverflow上也有相关的问题:https://stackoverflow.com/questions/39550656/how-does-github-detect-signing-in-out
  • 大小: 143.3 KB
  • 大小: 150.2 KB
  • 大小: 180.7 KB
  • 大小: 161.4 KB
  • 大小: 177.2 KB
  • 大小: 117.8 KB
  • 大小: 111.9 KB
  • 大小: 108.2 KB
1
1
分享到:
评论

相关推荐

    https://github.com/PlayVoice/so-vits-svc 预训练文件

    https://github.com/PlayVoice/so-vits-svc 预训练文件

    高仿喵播,视频直播 2.0版本

    解决登录程序偶尔崩溃,修复轮播图片和页面控制器叠加等问题,修复新浪授权登录 (2016.9.7) 解决程序运行中偶尔崩溃问题,解决连续下拉刷新崩溃问题,优化代码 (2016.9.8) 优化直播页面,减少不必要的性能...

    git-for-windows.github.io, 用于 Windows的upcoming版本 2.x的网站.zip

    git-for-windows.github.io, 用于 Windows的upcoming版本 2.x的网站 Windows 主页的Githttp://git-for-windows.github.io/开发git clone https://github.com/git-for-windows/git-for-windows.gi

    github_winutils-master.rar

    https://github.com/4ttty/winutils 公司不能连GitHub,备用,如果可以联网的,可通过上面链接下载

    win11任务栏拖动修复小插件免费下载【来自github-Dr.MonaLisa】

    源地址:https://github.com/HerMajestyDrMona/Windows11DragAndDropToTaskbarFix 小工具是在GitHub上开源的,不用担心病毒。 它只是简单的模仿了键盘指令,在你拖拽文件停留在打开的软件上时,把窗口给打开。

    解决 github项目clone报错 Failed connect to github.com:443; 解决

    系统环境:CentOS Linux release 7.6.1810 (Core) 起因:npm构建时报错 ... fatal: unable to access 'https://github.com/nhn/raphael.git/': Failed connect to github.com:443; Connection timed out npm

    程序员需要经常刷题吗-glide:https://github.com/Masterminds/glide

    修复错误:Windows 操作系统无法将依赖项导出到供应商目录。 修复镜像导出子包到供应商目录错误。 错误 1 修复错误:Windows 操作系统无法将依赖项导出到供应商目录。 因为获取包后的 Windows 文件系统权限将无法...

    18个 ios 项目源代码

    18个 ios 项目源代码 各种布局 控件使用 及扩展视图 自定义UITableViewCell。实现各种样式的表格输入界面、自定义Tab Bar的文字、颜色和图片加箭头、列表个性化列表项、IOS欢迎界面等。

    genders:此项目已移至 Github:https://github.com/chaos/genders-开源

    Genders 是一个静态的集群配置数据库,用于集群配置管理。 它描述了集群的布局和配置,以便工具和脚本可以感知集群节点的变化。 此项目已移至 Github:https://github.com/chaos/genders

    CefFlashBrowser - Flash浏览器

    随着Flash逐渐被淘汰,许多浏览器不再内置或支持Flash插件,而CefFlashBrowser为需要运行Flash内容的用户提供了一种解决方案。 该项目利用了Chromium Embedded Framework(CEF),这是一个开源框架,允许开发者将...

    电影院选座管理 源码

    首先感谢的GitHub项目: 多点缩放移动:https://github.com/Almeros/android-gesture-detectors SelectSeatView:https://github.com/twl8023/SelectSeatView/ 功能: 1. 显示座位图 2. 可缩放 3. 可...

    Windows原始映像.zip

    Windows原始映像视窗本镜像仅发布Windows原版镜像,DD包与Windows原版镜像(带VirtIO)请参考以下链接DD包https://github.com/ILLKX/Windows-DDWindows原版镜像(带VirtIO) .../github.com/ILLKX/Windows-VirtIO本仓库所有...

    安卓版-高仿微信 文字、图片、视频、语音、位置、好友圈等 .zip

    编码不易,点个星!iOS版https://github.com/cmdbug/ZChat本项目修改网易云信IM加上网上开源项目编写,(附上使用的开源地址,如有遗漏立即)。使用以下开源项目并修改了部分内容...

    gallery.7z

    https://hiszm.github.io/gallery/index.html https://hiszm.github.io/gallery/add.html https://hiszm.github.io/gallery/login.html https://hiszm.github.io/gallery/detail.html ...

    WebGL教程_源码

    * http://mdn.github.io/webgl-examples/tutorial/sample1/ * http://mdn.github.io/webgl-examples/tutorial/sample2/ * http://mdn.github.io/webgl-examples/tutorial/sample3/ * ...

    GitHub爆破密码汇总.txt

    收集Github上公布的密码,整合在一起方便下载使用,来源地址https://github.com/rootphantomer/Blasting_dictionary

    基于Android的天气APP毕业设计项目

    功能 第一次打开APP引导页,缓冲加载 天气信息的显示 广告,推送 桌面小工具 新闻资讯的查看 蓝牙串口传输温度 ...SwipeMenuListView侧滑删除框架 https://github.com/baoyongzhang/SwipeMenuList

    Go-go-github-selfupdate一个Go库提供命令行工具的自我更新机制

    "Go-github-selfupdate"库的核心功能是允许命令行工具自动检测并安装最新版本。这个库通过GitHub API与项目仓库交互,获取最新的二进制文件,并进行安全、无痛的升级。下面我们将深入探讨其主要知识点: 1. **Go...

    GHG_V1_4_0.zip

    转载github的ghg黑客游戏 github地址https://github.com/Nictheboy/GHG/releases/tag/1.4.0

    genders:该项目已移至Github:https://github.com/chaos/genders-开源

    Genders是用于集群配置管理的静态集群配置数据库。 它描述了群集的布局和配置,以便工具和脚本可以感知群集节点的变化。 该项目已移至Github:https://github.com/chaos/genders

Global site tag (gtag.js) - Google Analytics