Переменная сеанса ASP Classic не всегда устанавливается - PullRequest
2 голосов
/ 14 апреля 2010

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

<!-- #include virtual="/clsdbAccess.cs"-->
<%
    set db = new dbAccess
%>
<html>
    <head>
      ...
          <script language="javascript" type="text/javascript">
           ...            
           </script>
    </head>

    <body>
    <%
    Session("CAME_FROM_NEWSPAPER") = "your local newspaper"  
    ...
    %>
      ... html stuff ...
    </body>
 </html>

Затем, на всех следующих страницах, когда мне нужно создать навигационные ссылки, меню и т. Д., Которые мы не хотим показывать этим посетителям, я проверяю, является ли эта переменная сеанса "" или нет, затем отрендерить соответственно.

Моя проблема в том, что мне кажется, что это отлично работает для меня в процессе разработки, затем я запускаю его в производство, и иногда оно отлично работает, а в других случаях вообще не работает. Иногда переменная сеанса устанавливается, иногда нет. Все остальное прекрасно работает. Но наш клиент видит противоречивые результаты на страницах, представленных их посетителям, и это проблема. Я пробовал войти в систему с разных компьютеров и подтверждаю, что получаю разные и непредсказуемые результаты. Проблема в том, что я не могу воспроизвести его по своему желанию, и я не могу устранить неполадки / отследить производство.

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

Есть ли что-то особенное или непоследовательное в переменных сеанса в Classic ASP? Есть ли лучший способ подойти к проблеме? ТИА.

Обновление Я обнаружил, что при первом посещении сайта через эту страницу переменная сеанса НЕ устанавливается. Меню и все, что должно появиться в этих случаях, отображаются с первого раза. Затем, если вы вернетесь и обновите страницу входа, снова перейдите на ту же страницу, на этот раз это сработает, и после этого. Затем я пошел и удалил все мое кэширование, куки и т. Д. И снова зашел на страницу входа в систему, снова попал на мою страницу: Bam, меню (т.е. без переменной сеанса). Я создал страницу "sessionvars.asp", где я отображаю содержимое этой переменной и, конечно же, она пустая. По крайней мере, теперь, когда я могу воспроизвести проблему по своему желанию, я смогу продублировать ее на Dev и отследить ее.

Ответы [ 2 ]

2 голосов
/ 23 ноября 2010

У меня была такая же проблема с сервером VPS.Нельзя использовать веб-сад с переменными сеанса в классическом ASP.

Перейдите в IIS Manager - Пул веб-приложений и измените число рабочих процессов на 1.

Если вы находитесь вна виртуальном хостинге попросите эту конфигурацию или измените пул приложений с одним работником.

Дополнительная информация: http://bytes.com/topic/asp-classic/answers/54826-asp-sessions-web-gardens

С уважением

www.imaginacolombia.com

1 голос
/ 14 апреля 2010

Я вижу пару сценариев, где это может произойти:

Первый в основном повторяет комментарий @ RobV, но суть заключается в том, что ASP-сеансы основаны на файлах cookie, хранящихся в клиенте браузера.Поэтому, если пользователь приходит с клиента, у которого отключены файлы cookie, вы не сможете получить переменные сеанса для этого клиента.

Другой сценарий заключается в том, что для некоторых пользовательских сессий может быть тайм-аут.Например, предположим, что пользователь переходит на страницу, которая устанавливает переменную сеанса (и ваш тайм-аут сеанса, скажем, 10 минут).Затем они выходят выпить кофе или завязать разговор.Затем пользователь нажимает на ссылку со своей страницы через 30 минут, и к этому времени сеанс прекращается.Вы можете попробовать увеличить время ожидания сеанса и посмотреть, улучшит ли это ситуацию.

Один из способов - вместо подхода сеанса - проверить URL-адрес клиента (HTTP_REFERRER)и посмотрите, является ли это URL, который вы считаете "местной газетой".Это, вероятно, больше работы (а некоторые браузеры в любом случае скрывают реферер), но может дать лучшие результаты.Черт возьми, вы можете попробовать комбинацию обоих подходов: сеанс и реферер.

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