, мы установили несколько 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, пока я не перезагружаю всю страницу. когда я перезагружаю всю страницу входа, я получаю перенаправление с первым тиком моего таймера.
дикое предположение: это потому, что эти страницы загружаются до того, как будет выполнен успешный вход в систему, у них нет файлов cookie для проверки подлинности. В результате запросы от них на сервер рассматриваются как не прошедшие проверку. – Thuan
, когда я открываю две вкладки и проверяю себя на второй вкладке, наблюдая за кукисами первого, я вижу cookie следующего Tickevent. Так что это не должно быть проблемой, я думаю ... но спасибо вам в любом случае! – CoastN