DotNetOpenAuth ASP.NET MVC 3 Сессия Проблема - PullRequest
1 голос
/ 01 февраля 2011

Я использую openid-селектор с DotNetOpenAuth в моем приложении MVC 3.Всякий раз, когда я устанавливаю переменную сеанса, а разделы DotNetOpenAuth находятся в web.config, мои переменные сеанса не сохраняются после перенаправления.

Я проверял переменную Session.SessionID, и она все та же, поэтому яЯ нахожусь в том же сеансе (я полагаю), но когда я проверяю переменные сеанса, которые я только что установил после перенаправления, они все установлены в нуль.

Я не видел никого больше с этой проблемой.Мне интересно, если DotNetOpenAuth просто еще не готов к MVC 3.Я также использую последнюю версию DotNetOpenAuth.

Вот соответствующие части файла web.config, если он помогает:

<configSections>
    <section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    <section name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection" requirePermission="false" allowLocation="true"/>
  </configSections>
  <uri>
    <idn enabled="All"/>
    <iriParsing enabled="true"/>
  </uri>
  <system.net>
    <defaultProxy enabled="true"/>
    <settings>
      <servicePointManager checkCertificateRevocationList="true"/>
    </settings>
  </system.net>
  <dotNetOpenAuth>
    <openid>
      <relyingParty>
        <security requireSsl="false"/>
        <behaviors>
          <add type="DotNetOpenAuth.OpenId.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth"/>
        </behaviors>
      </relyingParty>
    </openid>
    <messaging>
      <untrustedWebRequest>
        <whitelistHosts>
          <add name="localhost"/>
        </whitelistHosts>
      </untrustedWebRequest>
    </messaging>
    <reporting enabled="true"/>
  </dotNetOpenAuth>

Обновлено:

этопроисходит на моем сервере разработки, либо в IIS, либо когда я запускаю сервер разработки ASP.NET.

Кроме того, я попытался запустить сеанс в процессе и вне процесса, используя сервер состояний, и он не сделалразница.

Что касается нового сеанса, я проверил событие session_start, и оно не вызывается.Я также проверил Session.IsNewSession, и это также вернуло false.Так что что-то случайно (или, возможно, не так случайно) удаляет мои переменные сеанса!

Ответы [ 4 ]

1 голос
/ 17 июля 2013

Нашел проблему здесь (давно сейчас).По-видимому, MVC2 не волновало, есть ли у меня представление о моих действиях, где я просто выполнил некоторую обработку, а затем перенаправление.

Однако, начиная с MVC3, после моего обновления, если у меня не было представления о моем действии, на странице регистрировалась ошибка, и как только произошла ошибка, среда не сохраняла переменные сеанса, которые я простоset.

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

1 голос
/ 01 февраля 2011

Не самый лучший ответ, но я понял, что именно response.redirect по какой-то причине убивает переменные сеанса.

Так что я просто сделал вместо этого перенаправление JavaScript, сеанс остается, все работает нормально. До сих пор действительно не знаю, в чем здесь реальная проблема, но, эй, у меня нет целого дня, чтобы понять это.

0 голосов
/ 02 февраля 2011

DotNetOpenAuth определенно не имеет Session.Abandon или Session.Clear где-либо в своей кодовой базе. Возможно, что если вы устанавливаете куки после , клиенту отправлено перенаправление, что эти куки будут потеряны. Однако переменные сеанса обычно не сохраняются в виде файлов cookie по отдельности, поэтому, если вы создали файл cookie сеанса (и, по-видимому, он это сделал), тогда остальная часть вашего состояния должна быть там.

Было бы интересно разобраться в этом, внедрив собственное хранилище сеансов и отслеживая, что на самом деле происходит.

0 голосов
/ 01 февраля 2011

Это должно работать. Я использовал DotNetOpenAuth с ASP.NET MVC 3 без каких-либо проблем. Возможно, вы захотите проверить, что ваш сеанс не истекает, когда пользователь находится на удаленном сайте для аутентификации. Тот факт, что вы получаете тот же SessionId, не означает, что сеанс не истек. Это также может произойти, если сервер перезапускает домен приложения.

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