跨域认证的问题

互联网服务离不开用户认证.一般流程如下:
1、用户向服务器发送用户名和密码。
2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。
3、服务器向用户返回一个 session_id,写入用户的 Cookie。
4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。
5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。

自己创建 Session

  • 注: session 是后端的内容
  • 具体思路如下:
  1. 使用 session 空对象存 cookie 键值对.
  2. 当第一次进入的时候,生成一个随机数 sid,通过 cookie 传递 sid,并再后端使用session[sid] = msg的方式,记录本次的值
  3. 若非第一次进入,则需要从 cookie 中解析出 sid,进而得到该 sid 下的内容(有可能是用户信息)
const session = {}
http.createServer((req, res) => {const sessionKey = 'sid'if (req.url === '/favicon.ico') {return} else {const cookie = req.headers.cookieif (cookie && cookie.indexOf(sessionKey) > -1) {res.end('Come Back')console.log('cookie:', cookie)// 简略写法(未必具有通用性)const pattern = new RegExp(`${sessionKey}=([^;]+);?\S*`)const sid = pattern.exec(cookie)[1]console.log('session:', sid, session, session[sid])} else {const sid = (Math.random() * 9999999).toFixed()res.setHeader('Set-Cookie', `${sessionKey} = ${sid}`)session[sid] = { name: 'laowang' }res.end('hello cookie')}}}).listen(3000)
  • 说明:
  1. 浏览器首次访问,会生成sid保存在服务器中,并将sid返回给浏览器;
  2. 浏览器遇到Set-Cookie: 后把后面的内容放到,cookie中;
  3. 再次访问相同网址时,浏览器会把cookie获取,传递给服务器;
  4. 服务器根据sid进行认证,返回对应的结果




koa实现session

  • 基本用法
const koa = require("koa");
const app = new koa();const session = require("koa-session");app.keys = ['marron'];const SESSION_CONFIG ={key: 'marron rain',maxAge: 86400000,httpOnly: true,signed: true
}app.use(session(SESSION_CONFIG, app));app.use(ctx =>{if(ctx.path === '/favicon.ico') return;let n = ctx.session.coung || 0;ctx.cession.count = ++n;ctx.body = `第${n}次访问`;
});
app.listen(3000);
  • 说明:
  1. signed:true: 对生成的Value进行hash算法,(把不定长的值)摘要出一个定长的字符串,并且具有血崩效应.
  2. 摘要: 明文可以得出密文, 但是密文不能反编译成明文. 且密文依赖于明文, 明文一改变, 密文发生翻天覆地的变化.这样可以防篡改.
  3. 血崩效应: 明文发生很小的变化,密文变化很大,这样很难破译加密的规则.
  4. 常见的hash: SHA、MD5

node --- 实现session认证.相关推荐

  1. Node.js数据库与身份验证(MySQL,前后端身份认证:Session 认证机制,JWT认证机制)

    目录 MySQL SQL 语句语法 where 条件.and 和 or 运算符.order by 排序.count(*) 函数 在express项目中操作 MySQL 安装与配置 mysql 模块 1 ...

  2. js获取session_学习后端鉴权系列: 基于Cookie, Session认证

    说起鉴权大家应该都很熟悉, 不过作为前端开发来讲, 鉴权的流程大头都在后端小哥那边, 但是作为一个有志气的开发者肯定要好好学习整个鉴权流程以及方案, 不然怎么跟后端合作. 常见的鉴权方案 基于Cook ...

  3. Web身份认证——【 Session认证 】

    Web身份认证--[ Session认证 ] 今日学习目标: Web身份认证--[ Session认证 ] 1.Cookie回顾 2.提高身份认证的安全 3.session 认证 3.1 什么是ses ...

  4. Node.js session 存储的几种方法

    2019独角兽企业重金招聘Python工程师标准>>> Since the accepted answer is only connecting to remote hosts, i ...

  5. 常用的认证机制之session认证和token认证

    一.session认证 1.session认证的过程: 前端输入用户名和密码进行登录操作,后端拿到用户名和密码后,会把md5进行加密,加密之后,拿上加密后的密文到用户表中查找密文是否一致,判断用户是否 ...

  6. 基于session认证

    目前大多数web应用的用户认证机制都是基于session的.用户认证成功后,在服务端生成用户相关的数据保存在session中(当前会话),而发给客户端的sesssion_id 存放到 cookie 中 ...

  7. 程序员过关斩将--互联网人必备知识cookie和session认证

    菜菜,上次你说的cookie和session的文章,我觉得不太具体 那你想怎么样具体呢? 我自己从网上查了一下,很多关于cookie和session认证的,能不能给我讲讲 用户认证呀,可以呀 这样我下 ...

  8. 选择适合的Node.js授权认证策略

    英文原文:https://stormpath.com/blog/choosing-nodejs-authentication-strategy/ Node.js正在兴起!2010年就开始使用Node工 ...

  9. 选择适合的Node js授权认证策略

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 选择适合 ...

最新文章

  1. ros service
  2. 八数码 poj 1077 广搜 A* IDA*
  3. QT的QMimeData类的使用
  4. python读取plt文件吗_用Python读取文件并绘制CDF
  5. 熟悉JDK8新特性,“Lambda表达式与函数式接口”
  6. android获取运行应用程序,Android中获取正在运行的应用程序
  7. DORADO展现中间件的实现
  8. 《Java并发编程实践》学习笔记之二:线程安全性(thread-safe)
  9. Android 四大组件学习之Activity一
  10. 阿里巴巴CTO程立:CTO就是要给CEO扫清障碍和风险
  11. CSR (英国蓝牙芯片制造商)
  12. 关于:WindowsOffice 产品语言包
  13. html背景图片加载慢,javascript – 如何加快我网站的背景图片加载速度?
  14. asp.net 下载文件几种方式
  15. 基于Java的网上商城系统
  16. html 向上滚动 不间断,向上不间断滚动div+css+js模板
  17. [转贴] Crystal和Oscillator的区别
  18. 通信行业和互联网行业对比分析
  19. 量化投资学习——股指期货研究(二)
  20. VirtualBox 安装MAC系统 10.15

热门文章

  1. 异构服务器 微服务_Spring Cloud Alibaba Sidecar 多语言微服务异构
  2. c++语言程序的结构特点,C++的特点(特性)
  3. js封装函数_JavaScript基础-如何封装函数来改变元素的位置
  4. tcp 三次握手与四次挥手_TCP三次握手与四次挥手详解
  5. python超神之路:Python3 列表list合并的4种方法
  6. JS数组的迭代器方法
  7. Oauth2.0和1.0区别
  8. 15款的视频处理软件免费下载
  9. JavaScript调用Web Services实现无刷新三联动
  10. 无法连接到远程的SQL SERVER2000