管理子域的会话

时间:2019-06-12 07:35:38

标签: c# asp.net-core

我有2个ASP.Net Core 1.1应用程序。 App1作为网站节点托管在IIS中。 App2作为虚拟应用程序托管在App1下。

每个应用程序都有自己的会话,在每个人的startup.cs中创建。问题似乎是App1删除了App2的会话。

因此,这是场景:我浏览App2(虚拟应用程序)。然后,我浏览App1。当我回到App2时,会话已丢失或删除。

说实话,我不太确定发生了什么-这似乎是非常意外的行为。任何想法或帮助都将非常受欢迎。

App1:

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

App2:

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

其他信息: 我刚刚注意到,两个应用程序创建的cookie都被命名为“ .AspNetCore.Session”,我相信这是默认名称。但是,正如上面的代码片段中清楚说明的那样,我明确地以不同的方式命名每个会话cookie。

所以我想这里的真正问题是为什么我的应用程序没有创建自己的显式命名的cookie。

更新: 我想我已经回答了自己的问题。

在Configure方法中的startup.cs页面下,有以下内容:

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

如果单击它,我会发现CookieName有选项。可以在2个地方指定它似乎很奇怪。但是无论如何,它现在似乎正在工作。

1 个答案:

答案 0 :(得分:0)

  

您可以在2个地方指定它似乎很奇怪。

您可以在两个位置配置会话选项:使用services.AddSession(configureAction)或使用app.UseSessions(sessionOptions)添加中间件。

如果您决定在传递app.UseSessions对象时使用SessionOptions,则使用AddSession进行的配置将不适用。因此,您可以有效地覆盖已配置的会话选项。

您可以通过仅调用app.UseSessions()而不传递明确的SessionOptions对象来使配置的会话选项适用:

services.AddSessions(options =>
{
     options.Cookie.Name = ".AppX";
});
app.UseSessions();