HTTP--cookie+session+LocalStorag

2020-03-13  本文已影响0人  zhenghongmo

cookie

let  allCookie = document.cookie //读取cookie
document.cookie = newCookie //设置一个新的cookie
//实例:
document.cookie = "someCookieName=true; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/";

response.setHeader('Set-Cookie', 'xxx' ) // xxx 就是一个身份证

session

//在内存中开辟一个空间,用来存储 Session
let sessions = {}

//当用户登录成功时,设置一个sessionID,把信息储存到session中。

let sessionId = Math.random() * 1000000
sessions[ sessionId ] = { key: value } 
response.setHeader( 'Set-Cookie', `sessionId = ${ sessionId }` ) 

//当登录过的用户访问首页时,遍历 Cookie,将所有 Cookie 存储到一个 hash(哈希表)中

let mySession = sessions[ hash.sessionId ]
let username
if( mySession ){
    username = mySession.用户信息  // 用户信息表示 sessions 中的{ key: value }
}

LocalStorage

sessionStorage

HTTP缓存

cache-control

Expires

ETag

MD5

else if( path === '/js/main.js' ){
    let string = fs.readFileSync( './js/main.js', 'utf-8' )
    let fileMd5 = md5( string )
    response.setHeader( 'ETag', fileMd5 )  // 响应头中有 ETag ==> ETag: md5 值
    // 当设置了 ETag 响应头,下次刷新时,请求中会多一个 If-None-Match 的请求头,值为 ETag 的值(md5 值)
    if( request.header[ 'if-none-match' ] === fileMd5 ){  // 如果请求的版本号(md5 值) === 浏览器的 If-None-Match 的值(md5 值) ==> 相同版本不需要下载
        // 没有响应体
        response.statusCode = 304  
        // 304 Not Modified 表示资源未被修改,因为请求头指定的版本If-Modified-Since或If-None-Match。在这种情况下,由于客户端仍然具有以前下载的副本,因此不需要重新传输资源。
    } else{
        response.statusCode = 200
        // 有响应体
        response.write( string )
    }
    response.end()
}

区别与联系

Cookie + Session

Cookie + Storage

LocalStorage + SessionStorage

Cache-Control + ETag

上一篇下一篇

猜你喜欢

热点阅读