Управление сессиями для поддоменов - PullRequest
0 голосов
/ 12 июня 2019

У меня есть 2 приложения ASP.Net Core 1.1. Приложение I размещается в IIS как узел веб-сайта. App2 размещается в App1 как виртуальное приложение.

Каждое приложение имеет свой собственный сеанс, созданный в файле startup.cs каждого. Кажется, проблема в том, что App1 удаляет сессию App2.

Итак, вот сценарий: я просматриваю App2 (виртуальное приложение). Затем я просматриваю App1. Когда я возвращаюсь в App2, сеанс был потерян или удален.

Если честно, я не совсем уверен, что происходит - и это кажется очень неожиданным поведением. Любые идеи или помощь будут приветствоваться.

Приложение 1:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromMinutes(20);
        options.CookieName = ".App1";
    });
}

Приложение 2:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromMinutes(20);
        options.CookieName = ".App2";
    });
}

Дополнительная информация: Я только что заметил, что файл cookie, создаваемый обоими приложениями, называется «.AspNetCore.Session», который, по моему мнению, является именем по умолчанию. Однако, как ясно показано выше во фрагментах кода, я явно называю каждый cookie-файл сессии по-разному.

Так что, я думаю, реальный вопрос здесь заключается в том, почему мои приложения не создают свои собственные файлы cookie с явно заданными именами.

UPDATE: Я думаю, что только что ответил на свой вопрос.

Далее на странице startup.cs в методе Configure появилось следующее:

 app.UseSession(new SessionOptions()
 {
     CookieSecure = CookieSecurePolicy.Always,
     CookieHttpOnly = true,
     CookieName = ".App2" //added this
 });

Если вы нажмете на него, я обнаружил, что есть варианты для CookieName. Кажется странным, что вы можете указать это в 2 местах. Но в любом случае, похоже, сейчас работает.

1 Ответ

0 голосов
/ 12 июня 2019

Кажется странным, что вы можете указать его в 2 местах.

Вы можете настроить параметры сеанса в двух местах: либо с помощью services.AddSession(configureAction), либо при добавлении промежуточного программного обеспечения с помощью app.UseSessions(sessionOptions).

Если вы решите использовать app.UseSessions при прохождении объекта SessionOptions, то конфигурация, созданная вами с помощью AddSession, не будет применяться.Таким образом, вы фактически перезаписываете настроенные параметры сеанса.

Можно настроить примененные параметры сеанса, просто вызвав app.UseSessions() без передачи явного объекта SessionOptions:

services.AddSessions(options =>
{
     options.Cookie.Name = ".AppX";
});
app.UseSessions();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...