internet-explorer - 为什么在 IE9 中没有正确设置 HTTPOnly Cookies?

标签 internet-explorer cookies coldfusion session-cookies httponly

我已经使用以下代码(来自 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调试器中的响应头:

Google Chrome Debugger - Headers

当我在调试器中检查 cookie 时,它​​们被标记为 HTTPOnly:

Google Chrome Debugger - Cookies

当我在 IE9 中做同样的事情时,我可以看到 Set-Cookie调试器中的 header :

IE9 - Headers

但是,对于相同的请求,cookie 在调试器中是可见的:

IE9 - Cookies

当我在 IE9 中重新加载时,cookie 是可见的,但没有标记为 HTTPOnly:

enter image description here

IE9这里发生了什么?如何解决此问题以正确设置 HTTPOnly Cookies?

最佳答案

从评论中提升

我相信 IE8 中的开发人员工具存在一个问题,即不会显示带有 HTTPOnly 标志的 cookie。这可能仍然是 IE9 的问题,但我无法确认。

When I reload in IE9, the cookies are visible, but not flagged as HTTPOnly:



enter image description here

您在重新加载 IE9 后在开发人员工具中看到的 cookie 正在由您的浏览器发送到服务器。请注意屏幕截图的方向列中的发送。这也是为什么它没有将 HTTPOnly 标志显示为正在发送的原因。它对服务器没有意义。对于从服务器发送的 cookie,方向列将显示已接收。

how can I confirm that my server is setting HTTPOnly cookies in IE?



enter image description here

如果您查看从 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/

相关文章:

mysql - 如何在另一个查询中正确地 CFloop 查询?

json - 我如何确保 SerializeJSON 保留尾随/前导零?

css - 虚线输入的边框和密码在 IE 和 Chrome 中看起来很奇怪

javascript - 如何在XDR请求中指定dataType?

css - 仅在 IE9 中不显示图像

javascript - 浏览器是否将 localStorage 视为 cookie

python - 如何使用 Python Requests 库在 post 请求中发送 cookie?

javascript - 需要帮助调试 - IE 不在网站上显示 jquery 背景 slider

javascript - HTML中的站点范围音量控制

javascript - 我怎样才能 cfoutput 一个 JavaScript 字符串?