生活随笔
收集整理的这篇文章主要介绍了
node --- 实现session认证.
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
跨域认证的问题
互联网服务离不开用户认证.一般流程如下:
1、用户向服务器发送用户名和密码。
2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。
3、服务器向用户返回一个 session_id,写入用户的 Cookie。
4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。
5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。
自己创建 Session
使用 session 空对象存 cookie 键值对.当第一次进入的时候,生成一个随机数 sid,通过 cookie 传递 sid,并再后端使用session[sid] = msg的方式,记录本次的值若非第一次进入,则需要从 cookie 中解析出 sid,进而得到该 sid 下的内容(有可能是用户信息)
const session
= {}
http
.createServer((req
, res
) => {const sessionKey
= 'sid'if (req
.url
=== '/favicon.ico') {return} else {const cookie
= req
.headers
.cookie
if (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)
浏览器首次访问,会生成sid保存在服务器中,并将sid返回给浏览器;浏览器遇到Set-Cookie: 后把后面的内容放到,cookie中;再次访问相同网址时,浏览器会把cookie获取,传递给服务器;服务器根据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);
signed:true: 对生成的Value进行hash算法,(把不定长的值)摘要出一个定长的字符串,并且具有血崩效应.摘要: 明文可以得出密文, 但是密文不能反编译成明文. 且密文依赖于明文, 明文一改变, 密文发生翻天覆地的变化.这样可以防篡改.血崩效应: 明文发生很小的变化,密文变化很大,这样很难破译加密的规则.常见的hash: SHA、MD5
创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖
总结
以上是生活随笔为你收集整理的node --- 实现session认证.的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。