令牌Token和会话Session原理与攻略

朝野布告 2019-05-15 19:56:00 阅读数:25 评论数:0 收藏数:0

        本篇文章将从无到完整的登录框架或API详细讲述登录令牌原理、攻略等安全点。

        有些协议或框架也喜欢把令牌叫票据(Ticket),不论是APP还是Web浏览器,很多框架或协议都用到到了本文所说的这套类似的认证机制(客户端各种加密用户名密码当我没说),这里的以Asp.net core下Web登录和验证为例子进行讲述,但原理攻略和语言、框架都无关。

 

目录:

一、过程与原理

二、Demo数据库结构

三、Demo源码介绍

四、构建与验证Token

五、Token失效与登录唯一性

六、CAS/SSO单点登录

七、URL授权验证与扫码登录

八、Session实现

九、关于Token刷新

 

本片文章Demo:https://github.com/chaoyebugao/AcctAuthDemo

 

 

一、过程与原理 

令牌授权过程
 

令牌机制简单过程(点击查看大图)

        首先,这套机制使用场景是登录授权和身份验证,可以用在Web上,也可以用在API的访问控制上。这套机制其实和很多无状态框架登录/授权验证协议类似,这里将的其实和OAuth2.0里面授权码模式的原理是一样的(authorization code),只不过我们在这里将其步骤拆分,了解其原理和实现,以后搭建项目应用才能庖丁解牛。还有一点,很多框架的授权机制都太繁重且并不能灵活应用,这时候就可以自己搭一个。

        首先,用户使用终端向服务器提供可信凭证(一般登录是用户名密码,微信公众平台是appid+appsecret),服务端确认凭证正确,则返回授权的令牌(以下称Token)。这个Token是随机的字符串且与本次授权唯一相关。返回Token给终端的同时服务端也要一并保存Token,这样终端和服务端都只认Token,终端所有请求发送都需要携带此Token,服务端会验证和控制此Token。此时Token就有两个,一个是终端Token,一个是服务端Token,其中一个不对或没有,服务端都是拒绝的。

        举个例子,你上12306购票,购买过程就是授权你Token的过程,你的纸质票就是Token,另外一半对应的Token保存在12306那的DB里头,所有门闸就是网关,当你过门闸时会验证你Token是否对应DB的Token。你下车后,12306就把DB的Token标记处理掉,这样服务端就不会再认你手上的纸质票,票也就作废了。

        围绕这一机制,我们将讲述CAS单点登录、令牌授权与身份验证、Session实现、防重放攻击、登录唯一性、URL授权验证(用于验证邮箱等)等

 

 

二、Demo数据库结构

设备表:用于识别、记录不同的设备,同一设备应该有唯一的标记Id,下面详说

令牌表:用于持久化令牌,ExpireAt为过期时间,Token即令牌字符串,根据UserId与用户表相关联,根据DeviceId与设备表相关联

用户表:用户表,保存用户名密码等

设备表和设备标记(DeviceId)是可有可无的,可以根据实际业务来处理,有必要的话再增加其他相关联的数据和表

 

 

三、Demo源码介绍

用户Controller 

HomeController

UserController - 用户注册、登录、注销登录

HomeController - Index - 默认启动页,Token验证页

 

 

四、构建与验证Token

构建Token

验证Token

        Token的构建发生在用户提供的凭证(如用户名密码)被服务端确认无误之后。一次登录/授权的Token分两部分,服务端持有的我们叫数据库Token,用户端(Endpoint)持有的叫终端Token。终端Token可以是任意的随机字符串构成,所以这里最后要根据登录情况来求得哈希值即终端Token本身。因为后面要根据终端Token来查询处理数据库Token记录,所以他们必须有种关联,这种关联就是如上图所示,终端Token+设备Id得到的哈希值即数据库Token本身。

        可以看出,整个生成过程是单向不可逆的,验证也只能是单向验证,所以生成关系是这样的:

授权Token构建关系图

授权Token构建关系图

 

        这里有几点要注意的:

  • 终端Token应该有足够的长度,且每次应随机生成,因此才有Guid.NewGuid()参与求值
  • 终端Token参与生成的userId、name和inputPassword是起到了盐作用,让整个构建更加复杂
  • 不论是终端Token还是数据库Token都不应该可逆加密处理任何内容,因为可解密的话不论是终端还是数据库数据泄露的,都有被破解的风险,所以用哈希求值是最合适的
  • 构建数据库Token有deviceId参与,这样每次Token就只能是对应的deviceId才能被验证,这样就起了绑定作用。除了deviceId还可以绑定其他场景相关的,比如IP地址
  • 日志最好不要记录任何Token

        两部分Token构建好之后,终端Token将被返回给终端,数据库Token持久化到服务端中。Demo中

        终端和数据库都要将各自的Token和场景信息持久化,Demo里面终端Token和deviceId放到了Cookie中。每次请求的终端都需要提交终端Token和绑定用的场景信息(deviceId),因为验证的时候数据库Token保存的是由它们哈希过来的值,因此验证的时候也是使用一样的构建过程(即Demo里面的BuildDatabaseToken),这样终端Token和数据库Token就有了对应关系。得到数据库Token就能在数据库里面查找了(即上图的loginTokenRepository.FindUser)。Demo的验证页面是Home/Index,里面s使用了过滤器CheckLoginTokenActionFilterAttribute做验证,在需要验证的Controller或Action上做ServiceFilter属性标记处理即可。

        这里有几点要注意的:

  • 如果使用Http做接口且有App接入,不方便地支持Cookie机制的话可以改为放在请求头中
  • 如果使用Http且为Web浏览器,终端Token保存的Cookie应该设为HttpOnly,让JS不可触碰

        到这里童鞋们知道为什么Token拆成两部分了吗?整个Token授权过程是单向不可逆的,而且每个用户都有自己的哈希盐来生成Token,这样能避免哈希值被批量暴力破解,即使终端Token和数据库Token都泄露了你也对应不上。试想一下如果不是这样而是终端数据库的Token是相同的,那一旦数据库泄露那么黑客就能模拟Token进行登录/授权了。另外数据库Token哈希过后长度变短,查询性能也能提高。

 

 

五、Token失效与登录唯一性

        不论是终端Token还是服务端Token都要有失效机制,时间越短越安全,但也要结合使用场景需求来设定时长。终端Token如果是Cookie的话直接设定过期时间即可,并且要和数据库Token的过期时间一致。数据库Token生成的时候也要指定过期时间,Demo里面数据库保存的字段为ExpireAt。总的一共有以下几种失效情况:

  • 到了过期时间
  • 用户修改账户关键信息,服务端需要主动将旧的Token全部作废掉,如修改密码
  • 用户注销登录
  • 用户使用Token刷新机制

        另外,如果需求是一种终端只能一个登录,比如Web和App可以保持同时登录但App只能有一个登录,数据库Token还得绑定“终端类型”,这样在最新一次登录的时候把相同的终端类型的旧的数据库Token全部作废掉就好了。

 

 

六、CAS/SSO单点登录

        CAS即中央认证服务,SSO即SSO即单点登录。很多时候这两个会放在一起说,其实CAS是一套解决方案,SSO是一种机制描述。如果我们使用的是Http-Web那么我们如何实现我们自己的SSO呢?很简单,把Token和绑定的场景信息提升到同一个域下即可。比如有总部和门店两个系统分别使用了hq.xxxx.com/store.xxxx.com子域名,那不管从哪个系统登录,login_token和deviceId这两个Cookie放在顶级域.xxxx.com下即可,这样所有子系统都能访问得到它们。有没有发现登录新浪微博后,输入weibo.com都会先跳转到sso然后再跳转回来,这个也差不多,这也是为什么你登录了新浪微博,你新浪博客也是登录了的状态。

 

 

七、URL授权验证与扫码登录

        当我们需要进行邮箱验证的时候,有可能是用户登录和邮箱不是一个终端的,这时候我们就需要进行URL授权验证来避免用户再次进行登录。其原理很简单,在用户点击验证的链接上面附上URL授权令牌即可(下面简称URL Token),这个URL Token与登录Token不应该有关系所以应当单独保存。生成一个URL Token,服务端再对应保存类似的服务端Token,这样就有了【URL Token】 - 【服务端Token】 - 【用户】这样的对应关系。当用户在有效期内点击后,服务端获得URL Token也就能进行授权或验证。

        扫码登录的场景复杂一些,终端生成的二维码其实就是一个Token(我们称之为QR Token)这个Token是和终端绑定的。用户拿App扫了QR码,其实就是在App内同时提交QR Token和用户信息,用户确认可以登录后服务端会颁发登录Token给终端,这样终端就是登录状态了,这一步也就是上面构建和验证登录Token的过程。实际扫码登录需要实现即时通讯,这样终端才能做出相应的反应。另外QR Token也是一样有过期时间的,因此那些扫码登录的页面会做二维码自动刷新的。

 

 

八、Session实现

        其实有些童鞋会纳闷,完善的框架都会提供Session操作,其原理是一样的,那为什么我们还这么“造作”呢?原因有二,框架自带的可能过重,比如我就很不喜欢asp.net自带的授权认证机制,微软弄得一套一套的,简直就是全家桶,笨重,自己实现一个能定制化且轻量。第二,考虑类似上面的功能实现,自己做能更灵活地实现。

        我们已经实现了登录/授权和验证,接下来我们只要想办法把一些数据和Token绑定在一起,并放在缓存中,这些数据就是Session了。我一般的做法是封装一个SessionService,然后定义一套Session接口。一个Session数据由TokenKey-Value组成,如果Token失效,则清理所有对应的TokenKey数据即可。就是这么简单粗暴,不同的缓存组件实现不尽相同。

 

 

九、关于Token刷新

        OAuth 2.0里面有提供Token刷新服务,即终端持有的Token快过期的时候,终端可以再调用刷新接口来替换快过期的Token,达到永续状态。简单来说就是请求新的Token,请求时旧Token作废掉,实现并不复杂,参见:Oauth2.0(三):Access Token 与 Refresh Token

 

 

十、防重放攻击与签名机制

        重放攻击(Replay Attacks)又叫重播攻击,防范这个其实和本文讨论的主题没关系。完整实现的接口都有实现,欲知详情,等我下一篇。

 

        花了好几天来写了这边文章,同时也是自己对这一技术点的总结归纳,有不对的地方还请指正。

 

相关链接:

ASP.NET Web API与Owin OAuth:调用与用户相关的Web API

微信公众平台技术文档 - 获取access_token


版权声明:本文为[朝野布告]原创文章
转载请带上:http://copyfuture.com/blogs-details/4a5d5459e7e2635da85f6c5f75f9dfa5
或:https://www.cnblogs.com/huangsheng/p/10736796.html


  1. 我去面试,恰好碰到leader也来面试...
  2. LinkedIn评中国最具吸引力雇主:阿里居首 华为第9
  3. 致家长:学校是你必须敬畏的地方(老师们,转起来)
  4. 亚冠:国安客场不敌全北,遭遇开门黑!39岁李同国打败两代张玉宁
  5. 美国现有“反其道而行之”?号召它国别再抵制华为?
  6. 数据库设计Step by Step (10)——范式化
  7. SAP云计算业务负责人恩斯林离职 此前工作27年
  8. 连咖啡的大规模关店,是否会成为互联网咖啡泡沫破裂的前兆?
  9. 下雨天不知道带宝宝去哪里玩?这里推荐一位居家学习玩乐好帮手
  10. 选车3+2:曾经霸气的大鲨鱼 奥迪Q7的优缺点简析
  11. 她是清朝首位被废掉的皇后,还是孝庄的亲侄女,至今死因成谜
  12. 真有人问:月球上那个坑为啥命名天津,不叫北京?
  13. 王思聪称中国太多垃圾电影,原因:导演有问题
  14. A Simple TMUX Tutor
  15. java调用python的几种用法(看这篇就够了)
  16. 算法历练之路——传纸条(JAVA)
  17. 董明珠谈小米做空调:没压力!2023年格力的小目标:营收6000亿!
  18. 车长超4.9米,国六标准,原装进口豪车,仅23万带可变悬架
  19. 槟榔——医疗负担超过2千亿的地方产业
  20. FFmpeg命令行工具学习(五):FFmpeg 调整音视频播放速度
  21. 一文详解TensorFlow 2.0的符号式API和命令式API
  22. 营收增长减缓 谷歌拟在移动应用主页投信息流广告
  23. 三星和小米争霸印度市场:三星愿意放弃利润来换冠军宝座
  24. 诺曼底登陆时如果听从隆美尔的建议,将坦克部署在滩头结果会怎样
  25. 专业闪瞎眼武器?俄罗斯推出新型装备,两千米以内敌方全员失明!
  26. 近现代第一个超级大国,称霸海洋300年,现在却病入膏肓没法治
  27. Android8.1 开关VOLTE流程分析
  28. 柔美气质 品鉴积家约会系列月相腕表精钢款
  29. 全通教育收购爆大雷高管减持忙 投行长城证券帮忽悠?
  30. “汽车保险”迎来新玩法,按行驶里程付费更公平
  31. China GT最红车手指南!欢迎入驻懂车帝!
  32. pmdtechnologies ag在首尔和上海开设办事处
  33. 面试经验总结:注意这几点,面试通过率上涨30%
  34. 骚得不要不要的W酒店又来了,再次惊艳世界!
  35. SQL注入和XSS攻击的原理
  36. Clearlove斩获300胜:成为LPL历史首位300胜选手
  37. 需要空腹吗?给患者的起搏器术前5大注意事项!
  38. 中粮酒业整合初成首次亮相,横跨“红白黄”酒如何协同
  39. @所有人!11省份上调城乡居民养老金,这些人有望多拿
  40. 蚂蚁金服不是一家金融科技公司
  41. 小米9涨价背后,到底有哪些无奈?
  42. 别去试探人心,它会让你失望的。
  43. 闲谈.Net类型之public的不public,fixed的不能fixed
  44. 从阿尔斯通公司的肢解看美国当下对华为的围剿
  45. 奇女子董明珠:心中的“董小姐”或长存于芜湖
  46. 微博发布财报,第四季度净营收4.819亿美元
  47. 俞敏洪:我只用3招,让孩子彻底爱上学习!
  48. 《最强大脑》要垮?桑洁魏坤琳出轨细节被扒,戚薇才是神助攻
  49. 盖娅回应《仙剑奇侠传》手游台服停运 寻求法律途径解决
  50. 《再累!我也不能倒下。我倒下了,谁来替我坚强》
  51. 屏幕大真的可以为所欲为!盘点游戏中的三大”物理外挂“
  52. 明明对人很好,为什么人缘依旧那么差?原因很现实,看完很扎心
  53. 太湖佳境鼋头渚
  54. 太阳消失对地球有什么影响
  55. 超级网红张大奕“套路”频遭吐槽 连年亏损电商如涵控股赴美上市背后
  56. 老照片:18岁的她还是一个工人,两年后她成了人们的梦中女神
  57. 世界10条最长海底隧道:第一名青函隧道53公里长
  58. 震惊, 我居然用Python干这种事ꈍ .̮ ꈍ
  59. 又一合资车官宣:1号工厂暂停生产,一看车名,网友:撑不住了吧
  60. 互联网杀不死电影
  61. 勇士输太阳!杜兰特受伤,KD爆发了,一语让库里汤神无地自容
  62. 小牛电动第四季度净亏损3200万元 亏损幅度收窄
  63. 一张图弄懂js原型和原型链
  64. 看《驴得水》见证人心是怎么变坏的,开心麻花系列巅峰电影作品
  65. 频繁的乱辈、近亲联姻,才是蒙元皇室寿命短孩子少的最大原因
  66. 活着,就是一种心态
  67. 一人顶仨人!考辛斯和库里愉快谈心,今夏该留住谁?答案一目了然
  68. 什么是汽车空调热泵系统
  69. 香港警队开通微博,现实中的阿Sir比港片的还要帅!
  70. 灌篮高手全国大赛后的湘北,三井苦练三分,流川枫改打中锋
  71. JavaScript是如何工作的: Web推送通知的机制
  72. 机情烩:骁龙855+8+256G新机今日首销 三星天价电视开始预售
  73. 【杂文】搞一个对拍程序
  74. 2019年养老金迎来上涨,养老保险费率有望下调?
  75. 新泉股份:产销量下滑仍募资扩产,7.88亿增发合理性存疑
  76. 孩子出生后,这4个“证件”抓紧时间办齐全,落一个都很麻烦!
  77. 主力为什么要在尾盘拉高股价,一直不明白,终于有人说透彻了!
  78. 那些年,我们在学习编程的过程中可能会走的弯路!
  79. “吉大普奔”来了!电动smart花落吉利?北汽变“被抛弃”
  80. 两个浏览器窗口间通信
  81. 世界上最快的洲际导弹:从中国到纽约只需20分钟
  82. 不怕神对手就怕猪队友啊;高欢最好也是最后的机会置宇文泰于死地
  83. 赵丽颖要和谢娜再度同框上综艺,这次还带上了他?
  84. 《历史矩阵》:大彗星
  85. 制作成本2亿,片方亏1.88亿,甄子丹跌下神坛了,他到底怎么了?
  86. 深度解读:房产税的终极逻辑,400万亿财富会蒸发5%?
  87. 新京报:如何消灭996工作制
  88. 1956年捷克斯洛伐克卡车在西藏进行测试
  89. 一季度各地经济排行揭晓!云南增速第一 ,吉林垫底,经济放慢的“三北现象”蔓延到华东
  90. “莱昂纳德是最接近东部王座的男人?”—“76人已有黑马之势!”
  91. 联手顶尖改装厂牌巴博斯 史上最强WEY即将到来
  92. 漫步琅勃拉邦、寺院、王宫——弯弯游学、第590天
  93. 家人患乳腺癌,亲属需要做基因检测吗?普通人检测有意义吗?
  94. 江河集团:利润增三成,应收款逾百亿,海外业务风险需警惕
  95. 白宫同意美国第三、第四大通信运营商合并
  96. 苏明玉:没有《都挺好》,依然会很好
  97. 被苹果斥不知感恩 Spotify回怼:你垄断,你有理
  98. kafka安装
  99. 《python核心编程》读书笔记-创建TCP服务端/客户端
  100. 外星文明有来过地球吗?外星生命也会是碳基生命吗?

  1. Python开发:部分第三方库无法在线安装解决方法(949)
  2. [Swift]LeetCode325. 最大子数组之和为k $ Maximum Size Subarray Sum Equals k(779)
  3. Matlab 2019a 安装包下载以及安装和激活(720)
  4. 仅限Edge和Chrome访问 全新网页端Skype应用上线(686)
  5. 前端笔记之NodeJS(一)初识NodeJS&内置模块&特点(684)
  6. C#读取excel文件提示未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序(663)
  7. 【预警通告】Weblogic反序列化远程代码执行漏洞(640)
  8. Visual Studio 2019 正式发布,重磅更新,支持live share(600)
  9. 【预警通告】Apache Tomcat远程代码执行漏洞CVE-2019-0232(573)
  10. 网上赌博平台维护审核提不了款怎么办?(535)
  11. React 与 React-Native 使用同一个 meteor 后台(529)
  12. Sublime Text3 最新版3207 安装及破解(458)
  13. Visual Studio 2019 正式发布(389)
  14. [翻译] Visual Studio 2019: 极速编码. 智能工作. 创造未来.(389)
  15. 刘强东身边的CXO还有谁“幸存”(373)
  16. 舍命生子产妇吴梦丈夫怒斥:没抢肺源不是精神分裂,网友断章取义(371)
  17. Confluence SSRF及远程代码执行漏洞处置手册(370)
  18. 阿里巴巴2018年纳税516亿元 同比增40%(370)
  19. 机器学习 ML.NET 发布 1.0 RC(369)
  20. K8s集群安装--最新版 Kubernetes 1.14.1(338)
  21. 雷军清华演讲实录:小米9年的创新、变革与未来(334)
  22. 小米手机卖不动了?(327)
  23. F#周报2019年第14期(317)
  24. 积分一样却选手下败将出战国际赛,《最强大脑》云队选手被坑了?(300)
  25. 《最强大脑》要垮?桑洁魏坤琳出轨细节被扒,戚薇才是神助攻(257)
  26. 华电教授孙玉兵被指与昔日同学共同学术造假,多所高校调查(251)
  27. F#周报2019年第15期(249)
  28. 日本明仁天皇退位,日本“平成”年代结束(246)
  29. linux系统安装cdcfordb2udb(241)
  30. Oracle甲骨文大规模裁员,你背离时代就会被淘汰(240)
  31. 他联系叙恐怖分子“卖军火”,称能搞到2000枚导弹,关键时刻中国警察出手(237)
  32. 针对django2.2报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: ill....(236)
  33. 魔兽世界:8.15搏击俱乐部坐骑获取流程 鳄鱼布鲁斯坐骑(236)
  34. 女友被曝插足许志安郑秀文婚姻 知情人透露马国明已下定决心分手(232)
  35. SQL简介及MySQL的安装目录详解(229)
  36. 视觉中国深夜道歉:全面配合监管部门彻底积极整改(229)
  37. 为什么国内汽车用沥青阻尼片,而欧洲主机厂却用树脂?(229)
  38. 谁是苏小明饭局爆粗偷拍者?知情人称另有其人(225)
  39. NodeJs之邮件(email)发送(223)
  40. 迪玛希好惨!昨晚《歌手》为声入人心男团帮帮唱,却再被指控侵权(223)
  41. 市值暴跌90%,世界零售巨头申请破产战胜了所有对手却输时代(221)
  42. 函数防抖,与函数节流(221)
  43. 机器学习基石笔记:01 The Learning Problem(218)
  44. 深度学习python的配置(Windows)(215)
  45. [深度应用]·实战掌握Dlib人脸识别开发教程(213)
  46. 许志安出轨视频系蓄谋偷拍?司机被曝收40万装红外摄像头(210)
  47. Google AI 系统 DeepMind 高中数学考试不及格(210)
  48. 干货!21部漫威电影观影顺序指南,在《复联4》之前赶紧补齐!(209)
  49. 赌命生子九个月后,吴梦离世:前半辈子任性了,我用生命买单(206)
  50. 威廉王子出轨凯特王妃闺蜜? 外媒称婚外情致兄弟反目(203)
  51. spring-cloud-sleuth+zipkin源码探究(203)
  52. WebGL three.js学习笔记 纹理贴图模拟太阳系运转(201)
  53. 新更新kb4493472导致无法正常开机(195)
  54. 杜敬谦死因疑曝光!或因他这一特殊的训练方式,泳迷高呼孙杨退役(191)
  55. AntDesign Form表单字段校验的三种方式(189)
  56. 韦杰落网,金诚集团终局(188)
  57. 华为推出方舟编译器 称可提升安卓系统效率(186)
  58. 山东庆云民企3000亩土地被贱卖 国企接盘拟转性(185)
  59. 《权力的游戏》龙妈有那么多爱她的人,为什么最终会选择琼恩雪诺(183)
  60. 张无忌为什么爱上她?陈钰琪版赵敏终于给答案了(181)
  61. “国防”靠美国? 韩国瑜=马英九2.0? 走着瞧(180)
  62. 直认与老公感情淡了!27岁TVB上位女星:我们不是好熟(180)
  63. Python破解Wifi密码思路(180)
  64. CUBA Studio 8.0 发布,企业级应用开发平台(179)
  65. Github 上 Star 最多的个人 Spring Boot 开源学习项目(178)
  66. 张丹峰出轨最新锤来了!毕滢的朋友圈简直刷新下限啊!(177)
  67. 拿着普通员工超300倍的工资裁员800人,这家游戏公司CEO引发员工不满|一周新闻(177)
  68. 币安称 4000 万美元比特币被盗(175)
  69. 使用 C 语言实现一个 HTTP GET 连接(175)
  70. 不要996!程序员创建955.WLB不加班公司名单,GitHub周榜第二(175)
  71. AntD框架的upload组件上传图片时遇到的一些坑(175)
  72. 《跃迁-成为高手的技术》之联机学习(174)
  73. Codejam Qualification Round 2019(174)
  74. Weblogic CVE-2019-2647等相关XXE漏洞分析(173)
  75. python爬虫重定向次数过多问题(172)
  76. simulink创建简单模型(172)
  77. 强大的jQGrid的傻瓜式使用方法。以及一些注意事项,备有相应的引入文件。(170)
  78. [NewLife.XCode]高级查询(168)
  79. Algolia使用教程 , 超详细傻子看都会(166)
  80. Delphi 开发微信公众平台 (二) 用户管理(165)
  81. 核心算法缺位,人工智能发展面临“卡脖子”窘境(165)
  82. 告诉你去越南芽庄必带回的好东西(163)
  83. 只需知道电话号码 即可监控任意一部手机,获取位置,太可怕(163)
  84. 范斯晶对祖母的称呼很意外,范志毅很心疼,缺少母爱的孩子不容易(162)
  85. 如何定位前端线上问题(如何排查前端生产问题)(162)
  86. 百度网盘下载神器 PanDownload v2.0.9(破解版、不限速)(160)
  87. 双双出轨!许志安劈腿马国明港姐女友,二人被拍16分钟激吻超20次(160)
  88. 数学家发现完美的乘法(160)
  89. 定义工作,解读自我——IT帮2019年2月线下活动回顾(160)
  90. 高管被警方带走背后:巧达科技操盘2亿人简历生意(159)
  91. 吹爆惠英红,《铁探》这位霸道总警司超带感!真乃港剧罕见大女主(157)
  92. vue生成图片验证码(156)
  93. 三国正史第一猛将:一人单挑数千人,不是吕布也不是关羽(155)
  94. 从0到1上线一个微信小程序(154)
  95. FreeSql 如何现实 Sqlite 跨库查询(154)
  96. 向佐的弟弟叫向佑,网友:那郭碧婷生的孩子叫什么?(153)
  97. [Node.js] 3、搭建hexo博客(153)
  98. spring-boot-2.0.3不一样系列之源码篇 - pageHelper分页,绝对有值得你看的地方(153)
  99. TensorFlow从1到2(十)带注意力机制的神经网络机器翻译(152)
  100. java基础(十五)----- Java 最全异常详解 ——Java高级开发必须懂的(152)

  1. 函数优化实战
  2. numpy数组之存取文件
  3. 曾之乔眼眶泛红爆哭! 5万粉虐心看10秒 最后一刻笑了
  4. 自杀式选角
  5. 登陆Linux服务器时触发邮件提醒
  6. 风暴中的华为员工信首次公布:女朋友停止吵架,家人劝不要做逃兵
  7. 莫迪大胜,对中国意味着什么?
  8. 搞假材料欺骗中央,书记区长双双被免
  9. 小白入门AI教程:教你快速搭建大数据平台『Hadoop+Spark』
  10. MySQL 事务
  11. [Inside HotSpot] Serial垃圾回收器 (二) Minor GC
  12. 老婆举报医生老公“收药品回扣”:他出轨并要求离婚 官方已介入调查
  13. 实验吧简单的sql注入3
  14. 死磕 java同步系列之自己动手写一个锁Lock
  15. [NOI2006] 网络收费
  16. 线性基的小证明...
  17. 从语言设计的角度探究Java中hashCode()和equals()的关系
  18. C# 多线程小试牛刀
  19. Python基础:输入与输出(I/O)
  20. link-1-STL 标准模板库
  21. mysql--浅谈多表查询1
  22. 进击JavaScript核心 --- (1)基本数据类型
  23. 大数据技术之_24_电影推荐系统项目_07_工具环境搭建(具体实操)
  24. 前端限制显示的文本字数的几种方法——不换行与换行
  25. 【实验吧】该题不简单——writeup
  26. 反向传播算法
  27. =、==、===、equals()的区别
  28. GitHub 推出开发者赞助项目
  29. 剑指Offer的学习笔记(C#篇)-- 从上往下打印二叉树
  30. argparse 在深度学习中的应用
  31. 张云雷复出?西城区文旅局:德云社在辖区内演出未发现违法违规问题
  32. Maven安装与配置
  33. acWing 825. 排队购物
  34. ajax&&jquery
  35. 苏联攻击机的悲壮行动,明知德军战机拦截,仍在无护航状态下出击
  36. 华为的5G技术,源于这种数学方法
  37. 一站式自动化测试平台 http://www.Autotestplat.com
  38. RabbitMQ总结
  39. 第九组 通信3班 063 自反ACL
  40. 短线还有最后一跌?大V们表示:反弹近了!(5月23日)
  41. 第九组 通信3班 063 OSPFv2与OSPFv3综合实验
  42. C# IE选项 - 重置IE
  43. Spring_数据校验和自定义检验规则
  44. 谈谈Java的string为什么是不可变的
  45. OFFICE 365 A1 Plus账号注册
  46. 初学python—做一个数组的增删改查操作
  47. oc工程中oc、swift混编代码打包成静态framework踩坑笔记
  48. 阿里云推“智能秒停系统”:50秒内短信通知 再不怕吃罚单
  49. 今天购买了一个云服务器
  50. 神奇!乌鸦竟然会传达悲观和怀疑情绪 还会对同伴“冷嘲热讽”
  51. 数字IC设计入门必备——VIM自定义模板调用与VCS基本仿真操作示例
  52. 点击事件的坐标计算(client || offset) +(X || Width || Left) 各种排列组合别绕晕
  53. windows下dubbo-admin2.6.x之后版本的安装
  54. linux 之基本命令学习总结
  55. 传祺难续“传奇”?销量暴跌超4成 加价卖车被“断裂门”尽毁
  56. 香港豪门后宫持续曝光:他用选美比赛“选妃”,与几万女星交往
  57. 小窥React360——用React创建360全景VR体验
  58. Spring Boot 2 快速教程:WebFlux 集成 Mongodb(四)
  59. .Net Core下使用RabbitMQ比较完备的两种方案(虽然代码有点惨淡,不过我会完善)
  60. “80后”女博士已任团中央书记处书记
  61. 杨元庆:现在是联想的最好时刻 我们四大战役全部打了胜仗
  62. Java开发环境的搭建(JDK和Eclipse的安装)
  63. oracle学习笔记(十四) 数据库对象 索引 视图 序列 同义词
  64. 机构风向标:外资出逃超500亿 美的集团等白马股表现欠佳
  65. 跟踪记录ABAP对外部系统的RFC通信
  66. c++11多线程详解(一)
  67. 小蓝杯,跌破发行价了
  68. [NewLife.XCode]百亿级性能
  69. 33岁何洁商场走穴被曝光,路人镜头下的她与精修图差别好大
  70. 途牛第一季度净亏损2240万美元 同比亏损幅度扩大
  71. 00 | Two Sum
  72. 智能威胁分析之图数据构建
  73. 快速掌握RabbitMQ(二)——四种Exchange介绍及代码演示
  74. Neo4j 第六篇:Cypher语法
  75. Java微信公众平台开发(三)--接收消息的分类及实体的创建
  76. Java8 中的 Optional
  77. 如何显示超大图像(3)
  78. 贵州检察机关依法对袁仁国决定逮捕
  79. 有关xerospolit运行报错问题的有效解决方案
  80. ADO学途 one day
  81. Linux 中 ip netns 命令
  82. Python爬虫之设置selenium webdriver等待
  83. BSOJ1040 -- 【练习题目】美元DOLLARS
  84. 外媒:稀土是中国手中的一张王牌
  85. sql server添加sa用户和密码
  86. 深入理解JVM的类加载
  87. querySelector和getElementById之间的区别
  88. 简说设计模式——观察者模式
  89. 扰动函数和拉链法模拟HashMap的存储结构
  90. 东芝中国:“上海东芝公司”不存在 未停止与华为的合作
  91. 彭于晏马思纯主演张爱玲这部小说,却被说更适合演《骆驼祥子》?
  92. 停止向华为供货?东芝辟谣回应
  93. 云米第一季度净利润5310万元 同比增长68%
  94. 贪吃的古蛙,古生物学家发现亿年前两栖动物之间战争
  95. APICloud发布低代码开发平台 效率提升30%至60%
  96. Golang 读写锁RWMutex 互斥锁Mutex 源码详解
  97. shell初级-----数据呈现方式
  98. 白玉兰入围名单公布!《知否》《都挺好》上榜,还有这部豆瓣3分剧
  99. 深网 | 京东618接入快手、抖音 实现“即看即买”
  100. 解决 APP启动白屏黑屏问题