Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据查询字符串,在会话超时时重定向到两个不同的登录屏幕之一_C#_Asp.net_.net - Fatal编程技术网

C# 根据查询字符串,在会话超时时重定向到两个不同的登录屏幕之一

C# 根据查询字符串,在会话超时时重定向到两个不同的登录屏幕之一,c#,asp.net,.net,C#,Asp.net,.net,我有一处历史遗迹,它被彻底破坏,正在被替换。无论如何,直到更换网站它准备好了,我必须维护这个网站 问题是我有一个网站需要知道登录用户的组码。例如,我有两个组Group1和Group2 默认情况下,登录页面上的仅为…/login.aspx,它将存储在会话中(group=Group1),如果使用…/login.aspx?group=Group2进入登录页面,则会话中将存储Group2 之所以这样做,是因为在我之前,它是一个非常复杂的身份验证登录屏幕,需要为多个会话变量设置站点。 这意味着在这个阶段,

我有一处历史遗迹,它被彻底破坏,正在被替换。无论如何,直到更换网站它准备好了,我必须维护这个网站

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

默认情况下,登录页面上的仅为…/login.aspx,它将存储在会话中(group=Group1),如果使用…/login.aspx?group=Group2进入登录页面,则会话中将存储Group2

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

我需要的是,当会话超时时,用户被引导回登录页面的正确变体,并记住他们所在的页面,以便返回到此页面

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


有人能给我指出正确的方向吗?会话结束事件似乎不起作用,因为此时会话已结束,因此没有什么可比较的。

我认为您无法做到这一点

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

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

编辑-需要更多信息

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

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

正如布拉姆所说——如果您将信息存储在另一个数据存储中——您可以从HttpModule获取该信息,并从那里执行自定义重定向


请注意,HttpModule将针对每个请求运行,因此任何Db调用等都可能会导致性能损失。

但您确实有SessionID。在db或其他存储中,将SessionID与组关联


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

如果不是答案,则是注释。即使没有答案。我还不能对其他人的问题发表评论-你需要至少15个代表:)好的,根据定义,会话结束将在没有请求的情况下进行。但是会话结束不需要重定向。没有请求,请求就不能发生。该请求将传递SessionID,因为该请求不知道其会话已结束。是的,这是我最终的路径,感谢我最终不得不使用cookie和查询字符串来标识已计时的会话或/或发生的错误。然后我处理饼干的价值。然而,如果页面被访问,并且cookie存在,但查询字符串不存在,那么它就会像cookie不存在一样进行。谢谢你的帮助:D