Node 之 Express 操作 cookie

cookie 是保存在浏览器端的,是不安全的,而且大小有限一般为4k

cookie 是可以往上访问的,在子级目录写的cookie,在其父目录时可以访问到的

cookie 是可以签名的,签名 cookie 不能让别人看不见,但是可以防止篡改

cookie 也是可以加密的,可以利用中间件 cookie-encrypter 去实现

一般情况去加密 cookie 是没什么意义的,重要的东西放 session 里面

使用 res.clearCookie(name); 删除 cookie

  • 以下代码示例如何写和读取 cookie
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    const express = require('express');//引入express框架
    const cookieParser = require('cookie-parser'); //引入cookie-parser中间件
    var server = express();//创建服务器

    server.use(cookieParser('shagnjie'));//cookie-parser中间件的作用:读取cookie,以及签名cookie 写cookie的时候 如果signed为true则写入带签名的cookie,如果没有改属性则是不带签名的cookie
    //监听‘/’下面的请求
    server.use('/',function(req,res){
    //req.secret = 'shagnjie';//在上面cookieParser中带了签名字符串这里就不需要了
    res.cookie('small-potato',"LOVE-YOU-I-am-your-small-mouse123",{path:'/',maxAge:1314*24*3600*1000});//写入不带签名的cookie
    res.cookie('small-potato1',"LOVE",{path:'/',maxAge:1314*24*3600*1000,signed:true});//写入带签名的cookie
    //console.log(req.cookies);//利用cookie-parser读取不带签名的cookie
    console.log(req.signedCookies);//利用cookie-parser读取带签名的cookie
    res.send('OK');
    res.end();
    });
    server.listen(3000);//监听3000端口

Node 之 Express 操作 session

session 是保存在服务器上的,相对于 cookie 更安全

session 是基于 cookie 实现的,是不能够单独存在的,cookie 中有一个 sessionID ,服务器利用这个 sessionID 去找到 session 文件 读取或写入

session 也不是绝对安全的,存在一种叫做 session 劫持:别人拿到我们的sessionID ,种到自己的浏览器上面,就可以以我们的身份去请求网站了

在Node中操作 session 需要使用一个中间件:cookie-session

  • 以下代码示例如何写 session
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    const express = require('express');//引入express框架
    const cookieParser = require('cookie-parser');//引入cookie-parser中间件
    const cookieSession = require('cookie-session');//引入cookie-session中间件
    const server = express();//创建服务器

    server.use(cookieParser());//要用session 必须先使用cookie
    //设置session的相关属性参数
    server.use(cookieSession({
    name:'sess',//session ID 名称
    keys:['aaa','bbb','ccc'],//秘钥,数组越大,安全性越高,可以随机
    maxAge:2*60*60*1000//过期时间
    }));
    //删除session 用 delete
    //写session实际上就是加属性,所以删除时可以像js语法一样使用delete
    server.use('/',function(req,res){
    if(req.session['count'] == null){
    req.session['count'] = 1;
    } else {
    req.session['count']++;
    }
    console.log(req.session['count']);
    res.send('ok');
    res.end();
    });
    server.listen(3000);