当我更改其他会话变量时,是否需要删除Coldfusion中的cookie

Rbt*_*Rbt 5 coldfusion

我的应用程序中的会话变量有问题.为了简化,我的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>
Run Code Online (Sandbox Code Playgroud)

如果我以用户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
Run Code Online (Sandbox Code Playgroud)

这项工作,我可以登录并注销不同的用户,具有不同的角色和访问完美但我注意到的一件事仍然保持不变是cookie.当我cfdump var ="#cookie#"时,我看到相同的jsessionid = C2AEE274A09334EB98CCB2D332D6CADA.cfusion

我的问题是:我应该对cookie做点什么吗?我是否应该让它过期并为每个新用户重建cookie,就像我对他们的会话所做的那样?如何删除cookie以及如何为用户重建cookie?

Joh*_*ish 1

不完全是您正在寻找的答案,但在我看来,您可能会遇到更大的问题 - 任何 URL 参数是数字还是“纯文本”?如果是这样,任何用户都可以看到通过 iframe 传递的 URL 参数,因此可以轻松更改用户 ID 和/或用户组,这可能会让他们访问不应该访问的内容。

例如,如果 iframe 调用: http://mycfapp.com/?userid =123&usergroup=2

然后通过篡改参数,我可能会以不同的用户身份登录: http://mycfapp.com/?userid =1&usergroup=2

您需要考虑保护这些内容。您可以让 .net 应用程序调用 CF 服务器端进行身份验证并获取令牌,然后您可以将其传递到 iframe 中。这样,您就可以提供时间敏感的令牌,而用户不会看到 id 作为简单的 URL 参数传递。

您还可以让 .net 应用程序在用户注销时调用 CF 以使令牌失效。