0

我有这个被惰性破坏并正在被替换的历史遗址。在更换站点准备好之前,我必须维护这个站点。

问题是我有一个需要知道登录用户组代码的站点。例如,我有两个组 Group1 和 Group2。

默认情况下,在登录页面上只是 .../login.aspx,它将存储在会话中(组 = Group1),如果用户使用 .../login.aspx?group= 进入登录页面Group2 然后他们将 Group2 存储在会话中。

这样做的原因是在我之前,它是一个非常复杂的身份验证登录屏幕,需要为多个会话变量设置站点。这么说意味着在这个阶段替换登录页面不是一个选项。

我需要一种方法,当会话超时时,用户被引导回登录页面的正确变体,并记住他们所在的页面,以便他们可以返回到该页面。

最低限度的解决方案是将他们重定向回正确的登录版本,辞职后返回他们所在的页面只是“想要”的功能。

谁能指出我如何做到这一点的正确方向,会话结束事件似乎不起作用,因为那时会话已经消失,所以没有什么可比较的。

4

3 回答 3

1

如果您可以编辑登录页面,请在登录成功后将其存储在 cookie group1 或 group2 中。当登录页面加载时,检查您的组 cookie 是否存在。如果有,您可以重定向到相应的登录 URL。

于 2012-08-27T01:52:24.263 回答
0

我不认为你能做到这一点。

正如您所说,在 Session_End 事件中(大概您正在使用 InProc 会话来触发此事件) - 没有会话来确定用户所在的组。即使您可以获得会话变量,也没有 HttpContext在 Session_End 事件中,因为它发生在服务器上,没有 Http 请求 - 所以你将无法重定向。

此事件可能会在站点位于屏幕上时触发,此时表单身份验证将重定向回登录屏幕,或者可能在用户关闭浏览器后很久才发生。

编辑 - 需要更多信息

您是否为应用程序使用 InProc 会话和表单身份验证?

如果是这样,一种可能的解决方案是创建一个 HttpModule,它可以在 FormsAuthentication 识别出请求中的 Session/Auth Cookie 已过期并重定向回登录之前运行。

正如 Blam 所说 - 如果您将信息存储在另一个数据存储中 - 您可以从 HttpModule 获取此信息,并从那里进行自定义重定向。

请注意,HttpModule 将为每个请求运行,因此任何 Db 调用等都可能会消耗性能。

于 2012-08-26T23:43:52.520 回答
0

但是你确实有 SessionID。在数据库或其他存储中,将 SessionID 与组关联。

HttpSessionState.SessionID 属性

于 2012-08-27T01:22:30.153 回答