我使用iisnode将节点与IIS结合使用,并且我在设置CookieSession选项secure:true
时遇到了麻烦。
我在IIS上使用HTTPS,并且我将任何HTTP重定向到HTTPS。
但即便如此,如果我设置CookieSession选项secure:true
,会话在登录后也不会有任何内容。
安全:一个布尔值,指示cookie是否仅通过HTTPS发送(HTTP默认为false,HTTPS默认为true)。
我被迫使用secure:false
让它发挥作用。为什么?
答案 0 :(得分:5)
<强>原因强>
iisnode代理从IIS到运行express的节点应用程序的请求。 ssl连接在IIS终止,您的节点应用程序收到http请求。当应用程序通过安全连接需要Cookie时,cookieSession和express-session将不会设置Cookie。
解决强>
当x-forwarded-proto
标题设置为&#39; https&#39;时,您需要告诉Express它可以信任代理。
您可以通过添加proxy: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。它使iisnode将x-forwarded-proto
(和x-forwarded-for
)请求标头添加到快速应用程序。
<configuration>
<system.webServer>
<!-- ... -->
<iisnode enableXFF="true" />
</system.webServer>
</configuration>
<强> PREREQUISITE 强>
iisnode至少需要0.2.11版才能让enableXFF
配置添加x-forwarded-proto
请求HTTP标头。您可以通过查看iisnode.dll
中可能安装的C:\Program Files\iisnode
文件的属性来检查您拥有的iisnode版本。如果&lt;&lt; s&lt; 0.2.11,只需从任何下载链接here下载最新版本。安装后,它会告诉您需要重新启动服务器。我可以告诉你,iisreset
命令(在高架cmd框中)就足够了。