Потеря данных переменной сеанса с одной страницы на другую в VB.NET - PullRequest
0 голосов
/ 21 марта 2019

Я немного новичок в VB.NET. У меня есть страница, которая устанавливает 2 переменные сеанса и выполняет перенаправление на вторую страницу. Вторые страницы, по крайней мере, используют одну из переменных сеанса. Я могу сказать, потому что на второй странице, если переменная сеанса не является правильной, пользователь перенаправляется на страницу запрещенного доступа. На второй странице также используется рассматриваемая переменная сеанса. Он будет читать это заполнить сетку в зависимости от значения переменной. Я устанавливаю переменную так

Session("ID") = Convert.ToInt32(a_value) 

и на второй странице я получаю переменную, подобную этой

a_page_variable = Session("ID")

Что я нахожу странным, так это то, что когда я запускаю этот код в visual studio, он работает как положено, но когда я его развертываю и запускаю, я получаю 0 из моей переменной сеанса вместо истинного значения «a_value». Я пробовал несколько вещей, например, чтобы убедиться, что типы данных совпадают со страницы на страницу, и пробовал разные способы получения переменной, такие как

Session("userID")

и

CType(Session.Item("userID"), Int32)

Я также пытался увидеть, что происходит на второй странице, используя Response.Write Я также пытался использовать SQL Profiler, чтобы увидеть, какой вызов делается для заполнения сетки, но мне не повезло. GridView дает мне пустой набор данных, и профилировщик не обнаруживает вызов, сделанный из приложения. Я думал, что работа с переменными сеанса была довольно простой, но, очевидно, я что-то упустил.

Спасибо за вашу помощь, Билли

Ответы [ 2 ]

1 голос
/ 21 марта 2019

Одной возможностью (и единственной, о которой можно догадаться, насколько мало у нас информации) может быть response.redirect, вызывающий завершение приложения из-за исключения.

При перенаправлении вы всегда хотите передать false и затем вызвать завершенный запрос.

Response.Redirect(urlstring, False)
Response.CompleteRequest()

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

Кроме того, разрешите виртуальные пути, поскольку некоторые браузеры (особенно мобильные) могут видеть эти перенаправления как новые запросы целиком, создавая новые токены сеанса.

Dim urlstring As String
urlstring = Page.ResolveUrl("~/default.aspx")

при этом существует ряд возможных причин для этой ситуации.

  1. Пул приложений перезапускается
  2. Домен приложения перезапущен
  3. Код неожиданно изменил значение
  4. AV возится с файлами
  5. развернуто в веб-ферме

С приведенным выше описанием у нас просто недостаточно информации для устранения неполадок.

0 голосов
/ 25 марта 2019

Спасибо, ADyson, Стивен Райтон и все остальные, кто попытался помочь мне разобраться в этом.Мне удалось выяснить, что происходит, добавив код, который записывается в файл журнала на сервере.Нашел код регистрации здесь .Я обнаружил, что никогда не достигал кода, который устанавливает переменную сеанса, и по этой причине он никогда не появлялся на второй странице.Я пытался получить имя пользователя для входа с помощью Environment.UserName, который будет возвращать имя пользователя, который в данный момент вошел в операционную систему.Но я действительно хотел получить имя пользователя, который посещал мой сайт.Для этого я использовал User.Identity.Name.Это прекрасно работает, когда вам нужно знать, какой пользователь из домена Active Directory посещает ваш сайт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...