2012-01-03 3 views
2

Я хочу зарегистрировать сессию пользователей на своем сайте. Я надеялся просто установить переменную сеанса. Но инициализация этого дает мне проблемы.Сессионная переменная и Masterpages

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["SESSION_GUID"] == null) 
    { 
     Session["SESSION_GUID"] = Guid.NewGuid().ToString(); 
     Response.Redirect(Request.Url.ToString(), true); 
     return; 
    } 
    lnkUpload.Visible = (Session["LOGGED_IN"] != null); 
    btnLogout.Visible = (lnkUpload.Visible); 
} 

Кажется, что Masterpage создает переменную OK, но остальная часть нагрузки страниц (те, что с помощью главной страницы). Так что в моем журнале я вижу ДВЕ хиты. Один из них не имеет идентификатора сеанса, а второй хит имеет идентификатор сеанса.

Любая идея, почему дочерняя страница этой главной страницы загружается дважды? Это происходит только при первом запросе на сайт. После этого сессия работает нормально, и мы получаем только один удар.

+1

Возможно, я не понимаю ваш вопрос, но разве вы не пытаетесь его загрузить дважды через перенаправление? При первом вызове страницы (т. Е. Идентификатор предварительной сессии) идентификатор сеанса устанавливается, и страница загружается снова. –

+0

Код, который я показываю, находится на главной странице. Моя логика заключалась в том, что когда страница загружается, она сначала загружает главную страницу (?), А затем запрашивает фактическую страницу. На странице page_Load главной страницы я проверяю переменную сеанса. Если он не установлен, я устанавливаю его, останавливаю загрузку вызываемой страницы и обновляюсь до вызываемой страницы. Поэтому, если страница A использует главную страницу ... Я пытаюсь остановить загрузку страницы A по главной странице, установить переменную, а затем загрузить страницу A. Но страница A загружается дважды. Я знаю, что у меня есть обновление, но я думал, что обновление будет выполнено до загрузки страницы A. – Craig

+0

Я не уверен, но я не думаю, что так работает IIS (или любой другой веб-сервер, если на то пошло). Когда страница запрашивается, она загружается. Вы можете очистить все, как только сможете, вызвав Response.ClearContent и/или Response.ClearHeaders, а затем вызвав Response.End, но у вас все еще будет запись в журнале, указывающая, что страница была запрошена дважды (потому что это было). –

ответ

3

Page_Load события страницы содержимого будет называться перед Page_Load мастер-страницы, как показано на этапах 6-7 в ASP.NET Page Lifecycle

главная страница Page_Init Событие вызывается перед страницей содержимого Page_Init события, хотя, поэтому, если все, что вы делаете, это проверка на сеанс, вероятно, лучше всего обработать его в Page_Init главной странице и перенаправить туда. Это может вызвать проблемы, связанные с тем, как выглядит другой код в вашем проекте, но концептуально, одна из первых вещей, которую вы хотите сделать, - это проверить сеанс и правильно обработать его, вам не нужна страница/элементы управления для загрузки, прежде чем обращаться с перенаправлением.

+0

http://stackoverflow.com/questions/30868670/why-is-the-set-variable- -a-masterpage-empty-accessing-from-content-page Можете ли вы помочь – SearchForKnowledge

0

Попробуйте выполнить Response.End() на главной странице. Это остановит оставшуюся разметку.

Смежные вопросы