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

时间:2014-04-21 16:14:09

标签: internet-explorer cookies coldfusion session-cookies httponly

我已经设置了我的ColdFusion应用程序,使用下面的代码设置HTTPOnly cookie(来自http://www.petefreitag.com/item/764.cfm):

<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,所以这是空的。)< / p>

当我在Google Chrome中清除Cookie /会话并重新加载页面时,我可以在调试器中看到Set-Cookie响应标头:

Google Chrome Debugger - Headers

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

Google Chrome Debugger - Cookies

当我在IE9中执行相同操作时,我可以在调试器中看到Set-Cookie标头:

IE9 - Headers

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

IE9 - Cookies

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

enter image description here

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

1 个答案:

答案 0 :(得分:4)

从评论中提升

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

  

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

enter image description here

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

  

如何确认我的服务器是否在IE中设置HTTPOnly cookie?

enter image description here

如果您查看从IE9共享的屏幕截图,其中显示了响应标头,则在两个Set-Cookie行的末尾都可以看到HTTPOnly标志。这表明服务器将其发送到浏览器。然后由浏览器来尊重(或不尊重)该标志。我担心您在旧版Internet Explorer上处理开发人员工具的“按设计工作”问题。注意 - 这只是开发人员工具的问题,而不是浏览器对HTTPOnly标志的支持。

检查浏览器是否尊重HTTPOnly标志的一种简单方法是在地址栏中键入以下内容。

javascript:alert(document.cookie)

这将显示一个窗口,其中包含当前javascript可用的所有Cookie。任何带有HTTPOnly标志的cookie都应显示 NOT


这是我找到的一个参考 - View HttpOnly session cookies in Internet Explorer