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