带有计时器的单点登录登录页面,用于检查用户是否已登录

Single-SignOn-Loginpage with timer to check if user is already signed in

我们设置了多个需要登录用户的 asp.net 页面。为了尽可能减少管理开销,我们决定构建一种门户页面,用户可以在其中登录。在登录程序之后,他们将被重定向回他们想要导航到的页面。 这工作非常顺利,我们对此感到满意。

速览:

但有一件事让我有点恼火:用户经常打开我们网站的多个实例(选项卡)。如果他们在登录后打开它们 - 没问题。但如果它们在登录前打开,则在每个选项卡上获取登录页面。没关系,但我的目标是检查时间炸弹,如果用户已经登录。这样用户就可以登录其中一个选项卡,所有其他选项卡都会自动将用户重定向到目标站点,因为他现在已经登录了。

我以前使用过计时器,认为这应该没什么大不了的 - 但我不知道该怎么做。我现在做了什么:

我在我们门户的登录页面中创建了一个计时器。他位于更新面板中,以避免在用户输入他的凭据时重新加载整个页面:

<asp:UpdatePanel runat="server">
    <ContentTemplate>
        <asp:Timer ID="tiUpdater" runat="server" OnTick="GetTime" Interval="1000" />
    </ContentTemplate>
</asp:UpdatePanel>

然后我使用 GetTime-Tickevent 执行以下代码:

protected void GetTime(object sender, EventArgs e)
{
     if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated)
     {
         if (!string.IsNullOrEmpty(Request.QueryString["ReturnURL"]))
         {
             string sDestinationURL = Request.QueryString["ReturnURL"];
             Response.Redirect(sDestinationURL);
         }
         else
         {
             Response.Redirect("~");
         }
     }
}

我知道它非常基础 - 但它足以满足我们的需求。奇怪的是,滴答声似乎按预期进行。但是 'IsAuthenticated'-属性 似乎 return false 只要我不重新加载整个页面。当我重新加载整个登录页面时,我在计时器的第一个滴答声中得到了重定向。

天哪,我现在就去埋葬自己。在回答了你的 'wild guess' 之后,我再次查看了 chrome 控制台,发现有大量关于这个反 xsrf 东西的错误。我不得不承认我对此知之甚少,但是在注释掉所有这些 xsrf 代码之后,它就像一个魅力。

我想我必须多读一点才能理解这个机制。感谢您的宝贵时间!