我在Apache2反向代理后面有两个作为Linux服务运行的.Net Core 2.2 Web应用程序实例(test&test2)。我正在尝试在两个应用程序之间共享会话。
问题是application1开始在路径/创建会话cookie。 Application2启动它自己的会话,并将相同的cookie名称写入路径/。试图弄清为什么application2无法看到application1现有的cookie并使用它代替创建覆盖application1会话的新会话。
我认为这与我的.conf配置有关,因为这两个应用程序都在各自独立的会话中按预期运行。当我尝试通过反向代理共享时,我看到了一个问题。我也不是Apache专家,所以很可能我在这里缺少某些东西或设置了一些错误。
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.Lax;
});
services.AddDistributedMemoryCache();
int sessionTimeout = int.Parse(_configuration["Hosting:SessionTimeout"]);
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(sessionTimeout);
options.Cookie.SameSite = SameSiteMode.Strict;
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
options.Cookie.Name = "session";
});
services.AddHttpContextAccessor();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
ClassLibrary.Mvc.Constants.PathBase = string.Empty;
if (!string.IsNullOrEmpty(_configuration["Hosting:RoutePath"]))
{
string routePath = _configuration["Hosting:RoutePath"].Trim();
if (routePath[0] != '/')
routePath = "/" + routePath;
if (routePath[routePath.Length - 1] == '/')
routePath = routePath.Substring(0, (routePath.Length - 1));
app.UsePathBase(routePath);
ClassLibrary.Mvc.Constants.PathBase = routePath;
_logger.Information($"Route Path: {routePath}");
}
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseHttpsRedirection();
app.UseCookiePolicy();
app.UseStaticFiles();
app.UseSession();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
application.conf
<VirtualHost *:443>
SSLEngine On
SSLUseStapling Off
SSLCertificateFile /etc/apache2/ssl/application.cdcavell.tst/certificate.crt
SSLCertificateKeyFile /etc/apache2/ssl/application.cdcavell.tst/certificate.key
DocumentRoot "/var/www/Application"
ServerName application.cdcavell.tst
ServerAdmin cdcavell@gmail.com
ErrorLog /var/www/Application/logs/apache2-error.log
CustomLog /var/www/Application/logs/apache2-access.log common
LogLevel Error
Session On
ProxyPreserveHost On
SSLProxyEngine On
SSLProxyVerify None
SSLProxyCheckPeerCN Off
SSLProxyCheckPeerName Off
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
<Location "/test">
ProxyPass "https://127.0.0.1:5020/test"
ProxyPassReverse "https://127.0.0.1:5020/test"
ProxyPassReverseCookiePath "/test" "/"
Order allow,deny
Allow from all
</Location>
<Location "/test2">
ProxyPass "https://127.0.0.1:5023/test2"
ProxyPassReverse "https://127.0.0.1:5023/test2"
ProxyPassReverseCookiePath "/test2" "/"
Order allow,deny
Allow from all
</Location>
</VirtualHost>
完整来源: GitHub branch feature/0.3.0
状态: