Назад Далее Приложение ASP.NET и перенаправление времени ожидания сеанса

У меня есть приложение, в котором я пытаюсь перенаправить время ожидания сеанса, поэтому на моей главной странице я проверяю, является ли переменная сеанса нулевой для перенаправления, но проблема в том, что у меня есть другие страницы (производные) из мастер-страницы и на Page_Load производной страницы, на которых я также ссылаюсь на некоторые переменные сеанса, и я заметил, что событие PAGE_LOAD производных страниц (контента) срабатывает первым, а главная страница PAGE_LOAD срабатывает позже, поэтому появляется ошибка «Ссылка на объект не установлена».

Кстати, я пишу следующий код в LOGIN_BUTTON_PRESSED EVENT.

FormsAuthenticationTicket ticket - new FormsAuthenticationTicket(1, userName, DateTime.Now, DataTime.Now.AddMinutes(20), true, myRoles, FormsAuthentication.FormsCookiePath);

Session["uid"] = userName.Text;  
Session["ufullname"] = ufname;  

string hashCookies = FormsAuthentication.Encrypt(ticket);  

HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashCookies);    

Response.Cookies.Add(cookie);  

Response.Redirect("~/Main.aspx");

Пожалуйста, предложите решение для преодоления этой проблемы с примером.


person user342944    schedule 03.08.2010    source источник


Ответы (1)


Один из вариантов — переместить код из события Page_Load главной страницы в событие Page_Init:

protected void Page_Init( object sender, EventArgs e )
{
    //Your code goes here
}

См. Обзор жизненного цикла страницы ASP.NET.

person Tchami    schedule 03.08.2010
comment
Чами, ты неправильно понял мой вопрос. Приведенный выше код, который я вставил, чтобы сказать, что я использую FormsAuthentication. Я проверяю переменные сеанса в событии MasterPage (Page_Load), чтобы он также мог наследовать страницу содержимого, но содержимое (Page_Load) запускается первым, поэтому появляется ошибка ссылки на объект. Теперь, что вы, ребята, предлагаете. - person user342944; 03.08.2010
comment
Я не думаю, что я сделал. Событие Page_Init сработает перед событием Page_Load, поэтому, если вы переместите свой код в событии Page_Load главной страницы в событие Page_Init на своей главной странице, вы не должны получать никаких ошибок ссылки на объект на своих страницах содержимого. - person Tchami; 03.08.2010
comment
Хорошо, позвольте мне объяснить... в моем файле MasterPage.master.cs и событии Page_Load я пишу, если (Session[uid] == null || Session[ufullname] == null) { Response.Redirect(~/Default.aspx) ; } И на странице содержимого MyProfile.aspx.cs Page_Load событие, которое я пишу. ((Label)Master.FindControl(Label1)).Text = Мой профиль; ((Ярлык) Master.FindControl(ufname)).Text = Добро пожаловать, + Session[ufullname]; lbl_usertext.Text = Session[ufullname].ToString(); В соответствии с вашими предложениями я переместил код главной страницы в событие Page_Init, но по-прежнему получаю ошибку ссылки на объект. - person user342944; 03.08.2010
comment
эта строка Session[ufullname].ToString(); - person user342944; 03.08.2010
comment
На самом деле, когда я оставляю приложение бездействующим на 20 минут и нажимаю на любую ссылку на мою страницу контента, срабатывает page_loads с той же строкой. - person user342944; 03.08.2010
comment
1. Убедитесь, что вы действительно что-то записываете в переменную Session. 2. Пожалуйста, обновите исходный пост, указав исходный код событий Page_Load и Page_Init. - person Tchami; 03.08.2010
comment
Хорошо, я решил проблему, внедрив класс BASEPAGE и событие Pre-Init. Спасибо всем за ценный вклад. - person user342944; 03.08.2010