我的应用程序中的 session 变量有问题。简而言之,我的 Coldfusion 应用程序位于使用 iFrame 的 dot net 应用程序中。主应用程序使用 dot net,因此用户登录到 dot net 应用程序。
一旦用户成功登录,他们就可以访问我的 Coldfusion 应用程序。通过一个链接。所以没有登录到我的 Coldfusion 应用程序。 (老板不希望我们的用户登录两次!)。
为了区分每个用户,dot net 应用程序将两个 url 变量 url.userid 和 urlusergroup 传递给我的 Coldfusion 应用程序。然后我根据这些 url 变量创建了 session 变量,例如 session.userid 和 session.usergroup,以便在他们在我的 Coldfusion 应用程序中漫游时区分每个用户及其角色。
这就是我创建 session 的方式:
在我的 application.cfc (ColdFusion 10) OnSessionStart 我有:
<cfset session.userid= url.userid>
<cfset session.usergroup= url.usergroup>
如果我以用户 A 的身份登录,那么当我注销时(通过 dot net 应用程序)创建这两个 session ,然后以用户 B 的身份再次登录,为用户 B 创建另一组 session ,但 session 变量属于用户 A仍然存在。这把一切都搞砸了。
为了一次只维护一组运行的 session ,我在 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,就像我对他们的 session 所做的那样?
如何删除 cookie 以及如何为用户重建 cookie?
最佳答案
不是您正在寻找的答案,但在我看来您可能会遇到更大的问题 - URL 参数中的任何一个是数字还是“纯文本”?如果是这样,任何用户都可以看到通过 iframe 传递的 URL 参数,因此可以轻松更改用户 ID 和/或用户组,这可能会让他们访问他们不应该访问的内容。
例如,如果 iframe 调用:
http://mycfapp.com/?userid=123&usergroup=2
然后通过篡改参数,我可能会以不同的用户身份登录:
http://mycfapp.com/?userid=1&usergroup=2
你需要考虑保护这些。您可以让 .net 应用程序调用 CF 服务器端进行身份验证并获取 token ,然后您可以将其传入 iframe。这样你就可以提供一个时间敏感的 token ,而用户永远不会看到 id 作为简单的 URL 参数传递。
当用户注销以使 token 无效时,您还可以让 .net 应用程序调用 CF。
关于coldfusion - 更改其他 session 变量时是否需要删除Coldfusion中的cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30245978/