HttpContext.Session содержит ключи в одной среде, но не в другой - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть проект. NET Core 2.1 MVC, который я обновил до. NET Core 3.0 пошагово согласно этой ссылке . Проект использует IHttpContextAccessor для хранения нескольких значений в коллекции HttpContext.Session, и когда я запускаю проект с F5 в моей среде разработки, кажется, что все работает. Но когда я публикую sh проект на моем тестовом сервере, коллекция ключей сеанса пуста, и значений больше нет.

Поскольку код должен быть одинаковым в обеих средах, я думаю, он должен быть связан с как сессии настроены для проекта, но я не смог найти решение. Вот как настроен мой Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    services.AddDistributedMemoryCache();
    services.AddSession();
    ...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    ...
    app.UseSession();
    ...
}

Я попытался сериализовать объект Session с помощью Newtonsoft, но результат был очень ограниченным:

{"IsAvailable":true,"Id":"44b1d511-e0cb-a1a3-c117-84033b80df25","Keys":[]}

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

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Я наконец-то понял, в чем проблема, и это было немного ошибкой. Кажется, я забыл настроить параметры cook ie при добавлении сеанса в качестве службы в Startup.cs. Поэтому вместо этого:

services.AddSession();

это должно было быть так:

services.AddSession(options =>
{
    options.Cookie.SecurePolicy = CookieSecurePolicy.None;
    options.Cookie.SameSite = SameSiteMode.None;
});

Почему я заставил его работать в моей локальной среде, до сих пор не ответили. Возможно, это было связано с тем, что я получал доступ к проекту MVC с тестовой страницы на localhost (тот же домен, что и у проекта MVC), но на моем тестовом сервере проект MVC находится на другом домен. Тем не менее, все теперь работает как шарм.

0 голосов
/ 29 апреля 2020

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

<configuration>
  ...
  <system.webServer>
    ...
    <modules>
      <remove name="Session" />
      <add name="Session" type="System.Web.SessionState.SessionStateModule"/>
      ...
    </modules>
  </system.webServer>
</configuration>

Примечание. Я запускаю приложение в автономном режиме, а для ApplicationPool не задан управляемый код, и, наконец, я использую urlrewrite для обратного прокси на localhost: 5000 для запуска. net основное приложение на iis

...