zoukankan      html  css  js  c++  java
  • nodejs cookie与session

    cookie、session

    cookie:在浏览器保存一些数据,每次请求都会带过来
    *不安全、有限(4K)

    session:保存数据,保存在服务端
    *安全、无限

    --------------------------------------------------------------------------------------------------------------

    session:基于cookie实现的
    *cookie中会有一个session的ID,服务器利用sessionid找到session文件、读取、写入

    隐患:session劫持

    cookie:

    1.cookie空间非常小——省着用

    2.安全性非常差——校验cookie是否被篡改过

    用法:

    a.发送cookie

    res.secret='字符串';  //秘钥,对cookie加密
    res.cookie(名字, 值, {path: '/', maxAge: 毫秒, signed: true});
    // path:路径,maxAge:过期时间,signed:是否加密

    b.读取cookie

    cookie-parser中间件
    server.use(cookieParser('秘钥'));
    server.use(function (){
      req.cookies    未签名版
      req.signedCookies    签名版
    });

    c.删除cookie

    res.clearCookie(名字);

    举例:

    const express=require('express');
    const cookieParser=require('cookie-parser');
    
    var server=express();
    
    //cookie
    server.use(cookieParser('wesdfw4r34tf'));
    
    server.use('/', function (req, res){
      req.secret='wesdfw4r34tf';
      res.cookie('user', 'blue', {signed: true});
    
      console.log('签名cookie:', req.signedCookies)
      console.log('无签名cookie:', req.cookies);
     //res.clearCookie('user');
    res.send('ok'); }); server.listen(8080);

    session:

    cookie-session中间件

    cookieSession(options)

    name

    要设置的Cookie的名称,默认为session

    keys

    用于签署和验证Cookie值的键列表。

    secret

    如果keys没有提供,将用该字符串做标记

    Cookie Options

    其他选项传递给 cookies.get() 和 cookies.set() ,允许你控制secure、path、domain,并签署其他设置。

    这些选项还可以包含以下任何内容(有关完整列表,请参阅 cookies模块文档

    • maxAge:表示Date.now()到期的毫秒数
    • expiresDate指示Cookie过期日期对象(默认情况下在会话结束时过期)。
    • path:指示cookie路径的字符串(/默认情况下)。
    • domain:表示cookie的域的字符串(无默认)。
    • sameSite:一个布尔值或字符串,指示cookie是否为“相同站点”cookie(false默认情况下)。这可以设置为'strict',,'lax'true(映射到'strict')。
    • secure:一个布尔值,指示cookie是否仅通过HTTPS发送(false默认为HTTP true默认情况下为HTTPS)。如果这样设置,true并且Node.js不是直接通过TLS连接,请务必阅读如何在代理之后设置Express,否则Cookie可能无法正确设置。
    • httpOnly:一个布尔值,表示cookie是否仅通过HTTP(S)发送,并且不提供给客户端JavaScript(true默认情况下)。
    • signed:一个布尔值,表示cookie是否要被签名(true默认情况下)。如果是这样的话,.sig还会发送一个带附加后缀的同名的另一个cookie ,一个27字节的url-safe base64 SHA1值代表第一个Keygripcookie-name = cookie-value的哈希此签名密钥用于在下次接收到Cookie时检测篡改。
    • overwrite:一个布尔值,表示是否覆盖以前设置的相同名称的cookie(true默认情况下)。如果这是真的,在设置此Cookie时,将在同一请求中设置相同名称的所有Cookie(不管路径或域)是否从Set-Cookie头部中过滤掉
     

    1.写入

    server.use(cookieParser());
    server.use(cookieSession({
      keys: [.., .., .., ..]
    }));

    2.读取

    server.use('/', function (){
      req.session
    });

    2.删除

    delete req.session
    req.session = null

    举例:

    const express=require('express');
    const cookieParser=require('cookie-parser');
    const cookieSession=require('cookie-session');
    
    var server=express();
    
    //cookie
    server.use(cookieParser());
    server.use(cookieSession({
      name: 'sess',
      keys: ['aaa', 'bbb', 'ccc'],
      maxAge: 2*3600*1000
    }));
    
    server.use('/', function (req, res){
      if(req.session['count']==null){
        req.session['count']=1;
      }else{
        req.session['count']++;
      }
    
      console.log(req.session);
    
      res.send('ok');
    });
    
    server.listen(8080);

    --------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    Vue数据绑定和响应式原理
    JavaScript实现MVVM之我就是想监测一个普通对象的变化
    缓存的理解
    理解promise 02
    线段与线段的交点
    线段与线段交点的推导公式
    promise你懂了吗?
    wx import require的理解
    webgl example1
    sublime2常用插件
  • 原文地址:https://www.cnblogs.com/gxp69/p/7236217.html
Copyright © 2011-2022 走看看