2016-08-29 3 views
1

, мы установили несколько asp.net-страниц, для которых требуется зарегистрированный пользователь. чтобы как можно меньше сохранить административные издержки, мы решили создать вид страницы портала, на которой пользователи могут войти в систему. после процедуры входа в систему они будут перенаправлены обратно на страницу, на которую они хотели бы перейти. это работает довольно гладко, и мы довольны этим.Single-SignOn-Loginpage с таймером, чтобы проверить, был ли пользователь уже подписан в

Быстрый обзор:

  • все «childpages» проверить над мастером, если пользователь вошел в систему, если нет -> перенаправляют на портале
  • childpages и доли портала аутентификации печенья с использованием той же проверки машины. ключевой метод
  • аутентификации: аутентификация формы
  • проверку подлинности активного каталога

Но меня это немного раздражает: часто бывает, что пользователи открыли несколько экземпляров (вкладок) наших сайтов. если они открывают их после входа в систему - никаких проблем. но если они открыты прямо перед входом в систему, то на каждой вкладке введите страницу входа. это нормально, но моя цель - проверять время, когда пользователь уже зарегистрирован. Чтобы пользователь мог войти на одну из этих вкладок, а все остальные вкладки автоматически перенаправляют пользователя на целевой сайт, так как он сейчас вошел в систему.

Я использовал таймеры раньше и думал, что это не должно быть большой проблемой, но я не могу понять, как это сделать. Что я сделал прямо сейчас:

Я создал таймер на странице входа нашего портала. Он расположен в панели обновления, чтобы избежать перезагрузки всей страницы, а пользователь вводит в свои учетные данные:

<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("~"); 
     } 
    } 
} 

I знаю, что это просто чертовски, но этого достаточно для того, чего мы хотим. Странно то, что похоже, что тики идут так, как предполагалось. Но свойство IsAuthenticated-Property, кажется, возвращает false, пока я не перезагружаю всю страницу. когда я перезагружаю всю страницу входа, я получаю перенаправление с первым тиком моего таймера.

+1

дикое предположение: это потому, что эти страницы загружаются до того, как будет выполнен успешный вход в систему, у них нет файлов cookie для проверки подлинности. В результате запросы от них на сервер рассматриваются как не прошедшие проверку. – Thuan

+0

, когда я открываю две вкладки и проверяю себя на второй вкладке, наблюдая за кукисами первого, я вижу cookie следующего Tickevent. Так что это не должно быть проблемой, я думаю ... но спасибо вам в любом случае! – CoastN

ответ

0

О, черт возьми, я сейчас похороню себя. Отвечая на ваше «дикое предположение», я снова посмотрел на хром-консоль, чтобы увидеть огромную нагрузку на ошибки в отношении этой анти-xsrf-вещи. Я должен признать, что я мало знаю об этом, но после комментирования всего этого xsrf-кода он работал как шарм.

Я думаю, мне нужно прочитать немного больше об этом, чтобы понять эту механику. Спасибо за ваше время!

+2

Иногда глупый комментарий не был на 100% бесполезным, но только 99,99%: D – Thuan