我使用iisnode将node与iis一起使用,并且在设置cookiesession选项secure:true
时遇到问题。
我在iis上使用https,并将任何http重定向到https。
但即使这样,如果我设置CookieSession选项secure:true
,会话在登录后也不会有任何内容。
安全:一个布尔值,指示cookie是否只通过https发送(http默认为false,https默认为true)。
我被迫使用secure:false
来实现它。为什么?
最佳答案
原因
iis node将来自iis的请求代理到运行express的节点应用程序。SSL连接在IIS上终止,并且您的节点应用程序接收到一个HTTP请求。当应用程序需要通过安全连接使用cookie时,cookieSession和express-session将不会设置cookie。
分辨率
当x-forwarded-proto
头设置为“https”时,您需要告诉express它可以信任代理。
可以通过添加代理:true config
app.use(express.session({
proxy : true,
secret: 'your-secret-key',
cookie: {
secure: true
}
}));
或者您可以告诉Express在全球范围内信任代理:
app.set('trust proxy', 1)
也可以在web.config中将
enableXFF
设置为true。它使iInsnode向Express应用程序添加x-forwarded-proto
(和x-forwarded-for
)请求头。<configuration>
<system.webServer>
<!-- ... -->
<iisnode enableXFF="true" />
</system.webServer>
</configuration>
先决条件
iisnode至少需要0.2.11版本才能让
enableXFF
配置添加x-forwarded-proto
请求http头。通过查看iisnode.dll
中可能安装的C:\Program Files\iisnode
文件的属性,可以检查iisnode的哪个版本。如果here下载最新版本。安装后它会告诉您需要重新启动服务器。我可以告诉您一个iisreset
命令(在提升的命令框中)就足够了。关于node.js - 使用iisnode时保护CookieSession,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33871133/