我的应用中的会话变量存在问题。为了简化,我的coldfusion应用程序在使用iFrame的点网应用程序中。主应用程序使用dot net,因此用户登录到dot net app。 用户成功登录后,即可访问我的coldfusion应用程序。通过链接。所以没有登录我的coldfusion应用程序。 (老板不希望我们的用户登录两次!)。
为了区分每个用户,dot net app将两个url变量url.userid和urlusergroup传递给我的coldfusion应用程序。然后我基于这些url变量创建了会话变量,例如session.userid和session.usergroup,以区分每个用户及其在我的coldfusion应用程序中漫游时的角色。 这就是我创建会话的方式: 在我的application.cfc(ColdFusion 10)OnSessionStart中我有:
<cfset session.userid= url.userid>
<cfset session.usergroup= url.usergroup>
如果我以用户A身份登录,则会创建这两个会话,然后当我退出(通过dot net app),然后再次以用户B身份登录时,会为用户B创建另一组会话,但属于会话变量用户A仍然存在。这搞乱了一切。
要一次只维护一组会话,我在index.cfm中执行以下操作:
<CFIF StructKeyExists(session,"userid") >
<cfif session.usergroup NEQ URL.usergroup AND session.userid NEQ url.userid>
<cfset sessionInvalidate() />
<cfset session.userid = url.userid>
<cfset session.usergroup = url.usergroup>
</cfif>
</CFIF
这项工作,我可以登录并注销不同的用户,具有不同的角色并完全访问,但我注意到的一件事仍然保持不变是cookie。 当我cfdump var =“#cookie#”时,我看到相同的jsessionid = C2AEE274A09334EB98CCB2D332D6CADA.cfusion
我的问题是:我应该对cookie做点什么吗?我是否应该让它过期并为每个新用户重建cookie,就像我对他们的会话所做的一样? 如何删除cookie以及如何为用户重建cookie?
答案 0 :(得分:1)
不是你想要的答案,但在我看来,你可能会遇到更大的问题 - 是任何URL参数数字或纯文本&#39 ;?如果是这样,任何用户都可以看到通过iframe传递的URL参数,那么可以轻松更改用户ID和/或用户组,这可能会让他们访问他们不应该访问的内容。
例如,如果iframe调用: http://mycfapp.com/?userid=123&usergroup=2
然后通过篡改params我可能会以不同的用户身份登录: http://mycfapp.com/?userid=1&usergroup=2
你需要考虑保护这些。您可以让.net应用程序调用CF服务器端进行身份验证并获取一个令牌,然后您可以在iframe中传递该令牌。这样你就可以提供一个时间敏感的令牌而用户不会看到id作为简单的URL参数传递。
当用户注销以使令牌无效时,您也可以让.net应用程序调用CF.
答案 1 :(得分:1)
扩展John的说法,你需要从.net应用程序进行两次调用。
首先是验证来自.net系统的呼叫。作为回应,你应该回赠一个令牌。您可以针对userId将此令牌保存到会话或数据库中。
然后使用该令牌,您应该允许.net应用程序用户能够访问您的ColdFusion应用程序。您可以根据用户旅程在该令牌上设置超时。