我被要求使用J2EE变量而不是将CFID
和CFTOKEN
存储在Cookie中,因为CFID被报告为不合规:Predictable Cookie Session ID's Reported by Compliance Tests
所以我现在有一个带有JESSIONID
的cookie,以及一个带有URLToken
的会话变量,其中包含CFID和CFTOKEN。但是,每次刷新页面时,CFID和CFTOKEN都会发生变化。他们不像以前那样坚持下去。这意味着我们的管理员登录系统失败。
我已经完成了自己的谷歌搜索,但到目前为止一无所获。我发现的一个建议是编写代码以保留CFID和CFTOKEN。但是,这不是一个好的解决方案。
有什么建议吗?
Barebones测试
我安装了CF 10 Developer Edition并启用了J2EE Session Variables
使用
创建了一个Application.cfm<cfapplication name="test" sessionmanagement="Yes" setclientcookies="false">
和一个带
的index.cfm<h1>Cookie</h1>
<cfdump var="#cookie#">
<h1>Session</h1>
<cfdump var="#session#">
每次刷新Session.URLToken
都会发生变化
CFID = 2212&安培; CFTOKEN = 41db974c3d2eb4b6-640C21AE-FD53-499C-71FBEBA35D6B09E8&安培; JSESSIONID = E28AA17629928FB6F9E17674AC85C7AA.cfusion
CFID = 2213&安培; CFTOKEN = bb791a304929d0f5-6425021B-部A31b-B9C8-3628AE391B0F48FF&安培; JSESSIONID = E28AA17629928FB6F9E17674AC85C7AA.cfusion
进一步思考
在我们的登录系统中使用CFID
和CFTOKEN
来验证用户会话是否匹配,也许我应该将其更改为存储并验证JESSIONID
。也许CFID
和CFTOKEN
改变无关紧要。会话范围实际上是维护的,因此这可能完全没有问题。
<cfparam name="session.timestamp" default="#now()#">
答案 0 :(得分:2)
setClientCookies =&#34;假&#34;表示coldfusion服务器不会为当前会话创建cookie。 CFID和CFToken仍然存在,并且将是非持久性的。 在你的例子中检查jsessionid值在两种情况下都是相同的,这就是你应该使用的而不是CFID&amp; CFToken仅在需要时。 你是对的,你的会话状态是在你启用J2EE会话变量时维护的。