在我们的应用程序中,我们需要用户“冒充”不同的用户。把它看成是一个层次结构 - 鲍勃在层次结构中高于弗兰克。 Bob已登录,他需要在系统中短时间内处理Frank的内容。因此,我们向Bob提供了向他汇报的用户列表以及模拟链接。他点击这个链接,在幕后,我将Bob注销,并以弗兰克登录。我还设置了一个会话变量,告诉我真的Bob是谁,是谁的用户。另外,鲍勃(现在扮演弗兰克)在每页顶部都有一个很好的小链接,上面写着“停止模仿”。另外,当鲍勃扮演弗兰克时,鲍勃被限制做某些事情,比如改变弗兰克的密码。ASP.Net会员服务
这很好,直到我们遇到了一个情况,如果会话(我认为 - 在这里变得困惑)被破坏(比如当我将新代码和dll复制到活动站点时),那么当Bob点击“停止模拟”他被重定向到默认页面,并且仍然以Frank身份登录,但没有模拟会话变量。所以,现在Bob真的以Frank身份登录,并且可以更改Frank的密码(等等)。
是什么让一个会话变量(模拟)被摧毁,但我猜会话还在闲逛,因为它不会使用户再次登录?
这是我们的系统是如何工作的有些严重的错误(在我们的代码错误,我敢肯定,没有.NET)。有没有人对此有任何解决方案的建议?
我们正在使用ASP.Net C#,ASPNET会员服务,.NET 3.5,窗体身份验证...不知道你需要知道什么。
编辑:更新的信息。看起来像什么时候发生了“某些事情”,例如,当我重新编译一些dll并将它们复制到网络服务器时,会话被转储。或者,相反,会话中的变量会被抛弃。会话ID保持不变。我确实需要检查Session.IsNewSession,它会返回true,即使id与以前相同。
就像Utaal提到的,Membership Services与Session是分开的,所以它的表单auth token仍然在浏览器中,但是我的session变量告诉我这不是真正控制浏览器的用户isn'再也不存在了。
编辑:天空,这里是我正在做什么来验证用户。我想不通,我会插入一张票到这个流程:
if (Membership.ValidateUser(txtUserName.Text, txtPassword.Text))
FormsAuthentication.SetAuthCookie(txtUserName.Text, false);
所以,我在哪里可以滑在票据对象,并设置自己的信息?
@matt,已更新。一旦你将头部缠绕在身上,它确实是一块蛋糕。琐碎甚至... – 2010-02-23 05:11:20