2014-02-06 75 views
2

我注意到我的ColdFusion会话cookie的奇怪行为,即域名,路径和httponly属性不被保留。奇怪的会话cookie行为

在我的application.cfc文件中,我将this.setclientcookies设置为false。

在我onSessionStart事件中,我则有以下代码:

<cfset sessionRotate()> 
<cfcookie name="CFID" value="#session.cfid#" path="#application.sessioncookiespath#" domain="#application.sessioncookiesdomain#" httponly="yes"> 
<cfcookie name="CFTOKEN" value="#session.cftoken#" path="#application.sessioncookiespath#" domain="#application.sessioncookiesdomain#" httponly="yes"> 

我第一次访问一个页面CFID和CFTOKEN饼干被发送到浏览器与正确的价值观,域路径失效日期等。

但是,当查看请求cookie以进行后续请求时,cookie的值已经丢失。

如果我然后关闭浏览器,重新打开并转到页面,同样的cookie发送到服务器,所以我得到同一个会话,而不是浏览器在关闭时删除cookie的预期行为。

任何人都可以解释这一点吗?

谢谢。


针对肖恩。

响应饼干返回初始请求www.domainname.com/sub是:

设置cookie的CFID = 123456;域= .domainname.com表示;到期日=星期五,07-Feb-2014 15:12:33 GMT;路径= /分; HttpOnly

Set Cookie CFTOKEN = 2cf168a89952feec%2D4DAC5903%2D1DD8%2DB71C%2D3B0166C2FDAF5D6B;域= .domainname.com表示;到期日=星期五,07-Feb-2014 15:12:33 GMT;路径= /分;仅Http

的后续请求任何其他页面(在比/子目录同级别或更深的任何页面),或在同一页(即刷新页面)发送下面的请求cookie字符串:

CFID = 191297 ; CFTOKEN = 2cf168a89952feec%2D4DAC5903%2D1DD8%2DB71C%2D0B0166C2FDAF5D6D; ASP.NET_SessionId = s43bplyduc0hkgintth4gcqh

+0

通过后续的请求,你的意思是你刷新或你要去其他网页?如果有其他页面,它可能取决于您正在使用的路径和域参数的值。您可以将您正在使用的实际值和从服务器请求的页面路径放在一起,而不是向我们显示变量吗? –

+0

@SeanCoyne请参阅我的编辑 – Michael

+1

好的,那些是发送的标题。所以,第一对夫妇正在设置cookie。接下来的是浏览器加载的cookie。如果域和路径不匹配(你说他们这样做),那么浏览器不会发送它们,但是它发送它们,它的功能应该是它应该的。顺便说一句,如果您使用J2EE会话,您可能会对会话有更好的运气,它将设置jsessionid cookie而不是cfid和cftoken cookie。不确定你的用例是什么,但我总是使用J2EE会话,FWIW。 –

回答