Node.js Connect session() 参数中的安全选项是啥

Posted

技术标签:

【中文标题】Node.js Connect session() 参数中的安全选项是啥【英文标题】:What is the secure option in Node.js Connect session() paramsNode.js Connect session() 参数中的安全选项是什么 【发布时间】:2014-05-09 22:56:44 【问题描述】:

我正在处理以下Connect 示例:

var connect = require ('connect');
var timeout = 30000; // session timeout: 30 seconds
var sessionOpts = 
    secret: 'keyboard cat',
    key: 'myapp_sid',
    cookie:  maxAge: timeout, secure: true /*Example doesn't work with secure?*/
;

var app = connect ()
    .use (connect.favicon())
    .use (connect.cookieParser ('keyboard cat'))
    .use (connect.session(sessionOpts))
    .use (function (req, res, next) 
        var sess = req.session;
        if (sess.views) 
            res.setHeader ('Content-Type', 'text/html');
            res.write ('<p>views: ' + sess.views + '</p>');
            res.end();
            sess.views++;
         else 
            sess.views = 1;
            res.end ('welcome to the session demo. refresh!');
        
    )
    .listen (3000);

当我访问该站点时,如果 cookie 选项不包括 secure: true,则查看次数会增加并在 30 秒后重置。当我包含安全选项时,会话不再停留 30 秒,每次刷新都会重置。

什么是安全选项?如何将它与Connect 的会话中间件一起使用?

【问题讨论】:

【参考方案1】:

secure 参数为 HTTP cookie 设置 secure flag:

安全标志的目的是防止 cookie 因以明文形式传输 cookie 而被未授权方观察到。 为了实现这一目标,支持安全标志的浏览器只会在请求转到 HTTPS 页面时发送带有安全标志的 cookie。换句话说,浏览器不会在未加密的 HTTP 请求上发送设置了安全标志的 cookie。

在您的情况下,可能根本不会发送安全 cookie,因为您没有通过 HTTPS 提供您的页面。

【讨论】:

以上是关于Node.js Connect session() 参数中的安全选项是啥的主要内容,如果未能解决你的问题,请参考以下文章

Node.js/Express.js 会话管理 cookie 为会话 cookie

什么是 Node.js 的 Connect、Express 和“中间件”?

Node.js刷新session过期时间

connect & express简介

带有自定义 Http(s) 代理和 Connect.js 中间件的 Node.js 代理

使用 Nodejs Connect 重新生成会话 ID