我已经使用以下代码(来自 http://www.petefreitag.com/item/764.cfm )设置了我的 ColdFusion 应用程序来设置 HTTPOnly cookie:
<cfcomponent output="false">
<cfscript>
THIS.Name = "MyCFApp";
THIS.SessionManagement = true;
THIS.SetClientCookies = false;
THIS.SessionTimeout = CreateTimeSpan(0, 3, 0, 0);
THIS.ApplicationTimeout = CreateTimeSpan(0, 8, 0, 0);
</cfscript>
<cffunction name="onSessionStart" returntype="Void" output="false">
<cfheader
name="Set-Cookie"
value="CFID=#SESSION.CFID#;path=/;HTTPOnly;#APPLICATION.SECURE_COOKIES#;" />
<cfheader
name="Set-Cookie"
value="CFTOKEN=#SESSION.CFTOKEN#;path=/;HTTPOnly;#APPLICATION.SECURE_COOKIES#;" />
<cfreturn />
</cffunction>
</cfcomponent>
(仅供引用,
APPLICATION.SECURE_COOKIES
允许我为安全 cookie 设置特定于应用程序的值 - 生产是 SSL,所以我可以做安全,但我的本地开发环境不是 SSL,所以这是空的。)当我清除 Google Chrome 中的 cookie/ session 并重新加载页面时,我可以看到
Set-Cookie
调试器中的响应头:当我在调试器中检查 cookie 时,它们被标记为 HTTPOnly:
当我在 IE9 中做同样的事情时,我可以看到
Set-Cookie
调试器中的 header :但是,对于相同的请求,cookie 在调试器中是可见的:
当我在 IE9 中重新加载时,cookie 是可见的,但没有标记为 HTTPOnly:
IE9这里发生了什么?如何解决此问题以正确设置 HTTPOnly Cookies?
最佳答案
从评论中提升
我相信 IE8 中的开发人员工具存在一个问题,即不会显示带有 HTTPOnly 标志的 cookie。这可能仍然是 IE9 的问题,但我无法确认。
When I reload in IE9, the cookies are visible, but not flagged as HTTPOnly:
您在重新加载 IE9 后在开发人员工具中看到的 cookie 正在由您的浏览器发送到服务器。请注意屏幕截图的方向列中的发送。这也是为什么它没有将 HTTPOnly 标志显示为正在发送的原因。它对服务器没有意义。对于从服务器发送的 cookie,方向列将显示已接收。
how can I confirm that my server is setting HTTPOnly cookies in IE?
如果您查看从 IE9 共享的显示响应 header 的屏幕截图,在两个 Set-Cookie 行的末尾,您可以看到 HTTPOnly 标志。这表明服务器将其发送到浏览器。然后取决于浏览器是否尊重(或不尊重)该标志。恐怕您正在处理旧版本 Internet Explorer 上的开发人员工具的“按设计工作”问题。注意 - 这只是开发人员工具的问题,而不是浏览器对 HTTPOnly 标志的支持。
检查浏览器是否尊重您的 HTTPOnly 标志的一种简单方法是在地址栏中键入以下内容。
javascript:alert(document.cookie)
这将显示一个窗口,其中包含当前可用于 javascript 的所有 cookie。任何带有 HTTPOnly 标志的 cookie 都应该 不是 被显示。
这是我找到的一个引用 - View HttpOnly session cookies in Internet Explorer
关于internet-explorer - 为什么在 IE9 中没有正确设置 HTTPOnly Cookies?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23201183/