Session

作者: 海山城 | 来源:发表于2018-05-23 20:28 被阅读0次

上一篇Cookie的文章说明了Cookie的缺点。那么Session是如何避免这种缺点的呢?主要是通过随机数来保证的。

Session的实现过程

  • 服务器一块内存(哈希表)保存了所有 Session,这块内存就是服务器上的所有 Session
let sessions = {}
  • 客户端首次访问服务器时,服务器将SessionID(随机数)通过Cookie发给客户端,并且这个session里面存放的是可以识别用户的信息,比如用户id或者用户email
let sessionId = Math.random() * 1000000
sessions[sessionId] = {sign_in_email: email}
response.setHeader('Set-Cookie', `sessionId=${sessionId};`)
  • 客户端访问服务器时,服务器读取这个SessionID
let cookies = ''
if(request.headers.cookie){
  cookies =  request.headers.cookie.split('; ') // 可能会有多条cookie,以分号分割
}
//将每一条cookie以key: value的形式存入hash
let hash = {}
for(let i =0;i<cookies.length; i++){
  let parts = cookies[i].split('=')
  let key = parts[0]
  let value = parts[1]
  hash[key] = value 
}
let mySession = sessions[hash.sessionId]//hash.sessionId即为对应的SessionID,根据SessionID得到对应的session
  • 通过 SessionID 我们可以得到对应用户的隐私信息,如 id、email。这样不是直接将id,email存入Cookie,有可能会因为简单的id或者email推测篡改成其他用户
let email 
if(mySession){
  email = mySession.sign_in_email
}

补充

Session基本上是基于Cookie实现的,但是也可以用 LocalStorage + 查询参数实现

相关文章

网友评论

      本文标题:Session

      本文链接:https://www.haomeiwen.com/subject/fpcdjftx.html