После нескольких вызовов window.open тайм-аут моего сеанса ASP.NET - PullRequest
3 голосов
/ 22 сентября 2009

У меня есть приложение ASP.NET, которое использует режим сеанса StateServer со значением cookie, равным false. В некоторых местах есть ссылка, которая открывает окно для другого приложения (которое находится в том же домене, но в другом виртуальном каталоге). Следующие шаги вызывают у меня горе ...

  1. Запустить всплывающее окно
  2. Закрыть всплывающее окно
  3. Запустите всплывающее окно в том же приложении, что и раньше, с парой разных параметров
  4. Закрыть всплывающее окно
  5. Следующий запрос = время ожидания сеанса в «родительском» окне.

Использование сеансов без cookie-файлов решает проблему, поэтому каким-то образом мой cookie-файл удаляется браузером. Помимо использования сеансов без файлов cookie, как это можно решить? Для чего это стоит, я занимаюсь разработкой / тестированием с IE8.

EDIT

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

Ответы [ 3 ]

1 голос
/ 18 августа 2011

Возможно ли, что другое приложение (в том же домене) устанавливает свой собственный файл cookie, перезаписывая его в своем основном приложении? Можете ли вы использовать fiddler (или аналогичный инструмент), чтобы увидеть, какие файлы cookie устанавливаются какими приложениями?

0 голосов
/ 23 августа 2011

edit Видимо это не твое имя cookie, так что ... Возможно, вам нужно иметь AJAX-вызов на главной странице, который пингует службу (или универсальный обработчик) в вашем веб-приложении, чтобы поддержать сеанс.

JavaScript

window.setInterval(function() { 
    $.get('ping.ashx?nocache=' + (new Date()).getTime(), function() { 
        return true; 
    })
}, 30000);

В универсальном обработчике обязательно добавьте интерфейс маркера IRequiresSessionState.

Возможно, имена ваших файлов cookie сеанса совпадают.

В вашем файле web.config (для одного из приложений) измените имя файла cookie сеанса.

<sessionState
mode="StateServer"
timeout="20"
cookieName="DifferentASP.NET_SessionId"
0 голосов
/ 22 августа 2011

Проверьте все экземпляры вашего

Session.Clear();
Session.Abandon();

Если вы их вообще не используете, то вполне вероятно, что в окнах вашего браузера НЕ установлено совместное использование сеансов. Таким образом, новый экземпляр получает новый куки-файл сеанса (так как его имя куки совпадает с предыдущим, он может уничтожить существующий куки-файл сеанса) - как в игре на http://geekswithblogs.net/ranganh/archive/2009/04/17/asp.net-session-state-shared-between-ie-tabs-and-ie8.aspx

В идеале, отследить, на какой странице встречается заголовок Set-Cookie. Затем просмотрите запрос, идущий в этот ответ, и посмотрите, не пересылается ли ваш текущий файл cookie ASP.NET_SESSIONID. (Fiddler действительно лучший инструмент для этого) Во всяком случае - это попробовать.

...