2012-04-04 4 views
6

Я теряю ASP.NET_SessionId при переключении между страницами на моем сайте. Проблема возникает в Chrome/Firefox/Safari. Это не происходит в IE. Это довольно странно ... вот мой сценарий.ASP.NET_SessionId отсутствует

Доступ к моему сайту можно получить, введя www.example.org или example.org в браузере (это важный фрагмент информации, как вы увидите).

Я ввожу example.org. На моей домашней странице я заходил на свой сайт (примечание: я не использую аутентификацию форм ASP.NET). Меня отправляют на мою страницу пользователя по умолчанию (например, userpage.aspx). На этой странице я нажимаю на <a>, который отправляет меня на другую страницу на моем сайте. Ссылка <a> является полной (например, http://www.example.org/page2.aspx). Когда меня отправят на новую страницу, моя сессия будет потеряна!

Итак, я запустил Fiddler, чтобы попытаться обнаружить проблему. То, что я нашел, было интересно. Значок заголовка запроса Ссылка терялась между страницами.

Вот шаги:

  1. Перейти к example.org.
  2. Войти на example.org.
  3. Я перенаправляюсь к userpage.aspx. Референт http://example.org. Установлен параметр ASP.NET_SessionId.
  4. Я нажимаю на <a> (например, http://www.example.org/page2.aspx). После визуализации страницы ASP.NET_SessionId теряется.

Утерянный ASP.NET_SessionId постоянно утерян в Chrome/Firefox/Safari. Это не происходит в IE.

Если повторить вышеуказанные шаги, заменив example.org на www.example.org, ASP.NET_SessionId не будет потерян. Он работает правильно, каждый раз.

Любые мысли по этому поведению?

+0

В скрипале есть куки-файлы, отправленные во всех случаях или нет? –

+0

что вы пытаетесь сделать в коде страницы2? и используете ли вы режим сеанса InProc? –

ответ

6

Добавьте это в web.config под <system.web> элемент

 
<httpCookies domain=".mysite.com" /> 

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

+0

Я думаю, вы можете быть на что-то. Файл cookie - это только одна сторона уравнения для управления состоянием сеанса. Там также есть сервер. Я считаю, что с точки зрения IIS, www.mysite.com - это другое приложение, чем просто mysite.com. Даже если они указывают на те же физические файлы/каталоги, они представляют собой разные сущности, а сеанс основан на httpcontext.current, который связан с текущей областью применения. (Надеюсь, что кто-то умнее меня может это лучше сказать и проверить, правильно ли я прав. Я, вероятно, нет. Я просто просто излагаю это и надеюсь учиться.) – David

+0

@DavidStratton все они будут существовать в тот же пул приложений. Все сконфигурированные заголовки хоста указывают на тот же пул приложений. В этом случае я думаю, что браузер просто не отправляет файл cookie из-за домена cookie (поэтому его работа над проектом). Важная вещь здесь (не отмечена в OP) - это если скрипач показывает, что cookie отправляется или нет. –

+0

спасибо Это имеет смысл. – David

0

В моем случае следующим был вопрос:

В моей локальной среде Visual Studio, мой файл развития "web.config" accidentially содержала следующее:

<configuration> 
    <system.web> 
     <httpCookies requireSSL="true" /> 
    </system.web> 
</configuration> 

Поскольку разработка работает IIS Express в http://localhost:7561, который не является HTTPS, эта проверка запускает, чтобы не устанавливать/не принимать файлы cookie, включая cookie идентификатора сеанса.

Решение должно было просто прокомментировать строку <httpCookies requireSSL="true" />.


Другой подобный вопрос, который я мог себе представить, что Content-Security-Policy HTML мета-тег, который также controls how cookies are handled, также может быть настроен не позволить идентификатор сеанса печенья должен быть установлен.

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