Мои переменные сеанса не сохраняют свои значения, пока я не обновлю страницу

#asp.net #vb.net

#asp.net #vb.net

Вопрос:

Я загружаю asp.net страница в браузере, и я испытываю проблемы с состоянием сеанса.

По-моему Page_Init , я делаю это:

 Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
    If validPlayer() Then
        FillSession()
        'try to refresh the page
        Server.TransferRequest(Request.Url.AbsolutePath, False)
    End If

    If Session("playerID") = 194483 Then
        Response.Redirect("~/launcher/PortalLogin.aspx?err=You do not have permissions to access this game.")
    End If
End Sub

Private Sub FillSession()
    Session("gameID") = Request.QueryString("gameID").ToString
    Session("playerID") = Request.QueryString("playerID").ToString
End Sub
  

Я использую тестовый проигрыватель при разработке.

Поэтому я передаю GameID и PlayerID (194483) через URL.

Проблема в том, что когда он попадает, FillSession , затем проверяет, является ли Session("playerID") = 194483 при отладке сеанс пустым, и я получаю You do not have permissions to access this game. сообщение.

Похоже, у него еще не было времени заполнить сеанс.

Однако, если я обновлю страницу, она будет работать нормально.

Поэтому я попытался добавить эту строку после вызова FillSession() для обновления страницы:

 Server.TransferRequest(Request.Url.AbsolutePath, False)
  

Но это просто приводит к тому, что браузер оказывается в бесконечном цикле.

Есть ли способ заставить страницу обновляться автоматически, чтобы значения сеанса были там?

Спасибо!

Комментарии:

1. как заполняется validplayer?

2. @Jeremy oops Прямо сейчас он просто возвращается true , несмотря ни на что, из-за моего тестирования.

3. так что это хорошее место для начала устранения неполадок! где код, который устанавливает эту переменную?

4. Лучше использовать событие загрузки страницы — проверьте, является ли IsPostBack = False для первого запущенного кода.