【发布时间】:2010-02-09 18:46:38
【问题描述】:
在我们的应用程序中,我们需要用户“模拟”不同的用户。把它想象成一个层次结构——鲍勃在一个层次结构中高于弗兰克。 Bob 已登录,他需要在系统中以 Frank 的身份在短时间内做一些事情。因此,我们为 Bob 提供了一个向他报告的用户列表,以及一个模拟链接。他单击此链接,然后在幕后将 Bob 注销,然后以 Frank 的身份登录。我还设置了一个会话变量,告诉我 Bob 确实是他们的用户。此外,Bob(现在扮演 Frank)在每个页面的顶部都有一个不错的小链接,上面写着“停止冒充”。
此外,当 Bob 冒充 Frank 时,Bob 被限制做一些事情,比如更改 Frank 的密码。
这工作得很好,直到我们遇到这样一种情况,如果会话(我认为 - 在这里感到困惑)被破坏(例如当我将新代码和 dll 复制到实时站点时),那么当 Bob 点击在“Stop Impersonation”上,他被重定向到默认页面,并且仍然以 Frank 的身份登录,但没有 Impersonation 会话变量。所以,现在 Bob 确实以 Frank 的身份登录,并且可以更改 Frank 的密码(以及其他内容)。
会话变量(模拟)如何被破坏,但我猜会话仍在徘徊,因为它不会让用户再次登录?
对于我们的系统工作方式来说,这是一个有点严重的错误(我敢肯定,我们的代码中的错误,而不是 .Net 中的错误)。有没有人对此有解决方案的建议?
我们正在使用 ASP.Net c#、aspnet 会员服务、.net 3.5、forms auth...不确定您还需要了解什么。
编辑:更新信息。看起来当“某事”发生时,例如,当我重新编译一些 dll 并将它们复制到网络服务器时,会话被转储。或者,更确切地说,会话中的变量被转储。会话 ID 保持不变。我确实要检查 Session.IsNewSession 并且它返回 true,即使 id 与以前相同。
就像 Utaal 提到的那样,会员服务与 Session 是分开的,所以它的表单身份验证令牌仍然在浏览器中徘徊,但我的会话变量告诉我,这不是真正控制浏览器的用户不是没有了。
编辑:Sky,这是我为验证用户所做的工作。我不知道在这个流程中插入票证的位置:
if (Membership.ValidateUser(txtUserName.Text, txtPassword.Text))
FormsAuthentication.SetAuthCookie(txtUserName.Text, false);
那么,我可以在哪里输入工单对象并设置自己的信息?
【问题讨论】:
-
@matt,已更新。一旦你把头绕在它周围,它真的是小菜一碟。甚至是微不足道的......
标签: asp.net asp.net-membership