美文网首页
node.js cookie

node.js cookie

作者: Vergil_wj | 来源:发表于2021-07-20 06:50 被阅读0次

    cookie,存储用户本地信息。

    cookie 特点

    1. cookie 保存在浏览器本地,只要不过期,关闭浏览器也会存在。有效期默认一个会话,浏览器关闭即失效。
    2. 正常情况下 cookie 不加密,用户可轻松看到。
    3. 用户可以删除或者禁用 cookie。
    4. cookie 可以被篡改。
    5. cookie 可用于攻击。
    6. cookie 存量很小,大小一般为 4k。
    7. 发送请求自动带上登录信息。

    服务器在响应的时候回返回 cookie,浏览器此时可以拿到 cookie,浏览器下次请求时就会自动带上 cookie。

    安装

    npm install cookie-parser -- save
    

    引入

    var cookieParser = require('cookie-parser');
    

    设置中间件

    app.use(cookieParser());
    

    如果使用了 express 脚手架安装,则这几步都已自动配置好。

    设置 cookie

    格式:res.cookie(名称,值,{配置信息})

    res.cookie("name",'zhangsan',{maxAge:900000,httpOnly:true})
    

    cookie 参数说明:

    1. domain:域名。
    2. name = value:键值对,可以设置要保存的 key/Value,注意这里的 name 不能和其他属性项的名字一样。
    3. Expires:过期时间(秒),在设置某个时间点hour该 Cookie 就会失效,如 expires=Wednesday,09-Nov-99 23:12:40 GMT。
    4. maxAge:最大失效时间(毫秒),设置在多少后失效。
    5. secure:当 secure 值为 true 时,cookie 在 HTTP 中时无效,在 HTTPS 中才有效。
    6. Path:表示在哪个路由下可以访问到 cookie。
    7. httpOnly:是微软对 cookie 做的扩展。如果在 cookie 中设置了 “httpOnly” 属性,则通过程序(JS 脚本、applet 等)将无法读取到 cookie 信息,防止 XSS 攻击的产生。
    8. singed:表示是否签名 cookie,设置为 true 会对这个 cookie 签名,这样就需要用 res.signedCookies 而不是 res.cookies 访问它。被篡改的签名 cookie 会被服务器拒绝,并且 cookie 值会重置为它的原始值。
    router.get('/setcookie',function(req,res){
        // 基础设置 cookie,有效期默认为 1 个会话,浏览器关闭即失效。
        res.cookie("isLogin","true");
    
        //也可以设置失效时间 30 s
        //res.cookie("isLogin","true",{maxAge:30000});
    
        res.send("cookie 设置成功")
    })
    

    获取 cookie

    req.cookie.name;

    router.get('admin',function(req,res){
        console.log(req.cookies)
        if(req.cookies.isLogin == 'true'){
            res.send("登录成功");
        }else{
            res.send("登录失败");
        }
    })
    

    cookie 加密

    app.js

    app.use(cookieParser('secret'));
    

    index.js

    router.get('/setcookie',function(req,res){
    
        res.cookie("isLogin","true",{signed:true});
    
        res.send("cookie 设置成功")
    })
    

    获取加密后的 cookie :

    router.get('admin',function(req,res){
        console.log(req.signedCookies)
        if(req.signedCookies.isLogin == 'true'){
            res.send("登录成功");
        }else{
            res.send("登录失败");
        }
    })
    

    相关文章

      网友评论

          本文标题:node.js cookie

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