我已经设置了我的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
响应标头:
当我检查调试器中的cookie时,它们被标记为HTTPOnly:
当我在IE9中执行相同操作时,我可以在调试器中看到Set-Cookie
标头:
但是,对于相同的请求,cookie在调试器中可见:
当我在IE9中重新加载时,cookie是可见的,但不会被标记为HTTPOnly:
IE9在这里发生了什么?如何解决此问题以正确设置HTTPOnly Cookies?
答案 0 :(得分:4)
从评论中提升
我认为IE8中的开发人员工具存在一个问题,即不会显示带有HTTPOnly标志的cookie。这可能仍然是IE9的一个问题,但我无法确认。
当我在IE9中重新加载时,cookie是可见的,但不会被标记为HTTPOnly:
重新加载IE9后,您在开发人员工具中看到的Cookie被浏览器发送到服务器。请注意屏幕截图的“方向”列中的已发送。这也是为什么它不显示HTTPOnly标志被发送的原因。它对服务器没有意义。 “方向”列将显示从服务器发送的cookie的已接收。
如何确认我的服务器是否在IE中设置HTTPOnly cookie?
如果您查看从IE9共享的屏幕截图,其中显示了响应标头,则在两个Set-Cookie行的末尾都可以看到HTTPOnly标志。这表明服务器将其发送到浏览器。然后由浏览器来尊重(或不尊重)该标志。我担心您在旧版Internet Explorer上处理开发人员工具的“按设计工作”问题。注意 - 这只是开发人员工具的问题,而不是浏览器对HTTPOnly标志的支持。
检查浏览器是否尊重HTTPOnly标志的一种简单方法是在地址栏中键入以下内容。
javascript:alert(document.cookie)
这将显示一个窗口,其中包含当前javascript可用的所有Cookie。任何带有HTTPOnly标志的cookie都应显示 NOT 。
这是我找到的一个参考 - View HttpOnly session cookies in Internet Explorer