[英]ASP.Net Core Sql Session Persistence
我編寫了一個使用基於SQL的會話存儲的ASP.Net Core應用程序。 當我通過visual studio運行應用程序時,會話對象持續構建並啟動/停止IIS express,但是,當我將其部署到服務器(Win server 2012R2)時,應用程序池回收會導致它失去會話狀態。 - 編輯,實際上重啟了我的電腦,這顯然結束了一個潛在的過程,導致我也失去了在visual studio中的會話。
我的配置服務:
// Serializer settings have been changed so that the JSON response sends the same case, not lower case first letter as default
services.AddMvc().AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
// Builder to access the config
var builder = new ConfigurationBuilder();
builder.SetBasePath(Directory.GetCurrentDirectory());
builder.AddJsonFile("appsettings.json");
var config = builder.Build();
// Get and configure the session timeout
int SessionTimeout = Convert.ToInt32(config["AppSettings:SessionTimeout"]);
services.AddSession(s =>
{
s.IdleTimeout = TimeSpan.FromMinutes(SessionTimeout);
}
);
// Get the session state datebase location
var AspStateConnectionString = config["AppSettings:ConnectionStrings:ASPStateConnectionString"];
services.AddDistributedSqlServerCache(o =>
{
o.ConnectionString = AspStateConnectionString;
o.SchemaName = "dbo";
o.TableName = "Sessions";
});
我的配置:
// Configure to use session
app.UseSession();
// Pass context to CoreSessionManager class and ContextPerRequest
var httpContextAccessor = app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();
CoreSessionManager.Configure(httpContextAccessor);
CoreLibrary.ContextPerRequest.Configure(httpContextAccessor);
// Configure the routes - defaults to login page.
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Account}/{action=Login}");
});
CoreSessionManager類完成實際會話對象的工作:
private static IHttpContextAccessor HttpContextAccessor;
public static void Configure(IHttpContextAccessor httpContextAccessor)
{
HttpContextAccessor = httpContextAccessor;
}
public static UserDetail UserDetail
{
get
{
if (HttpContextAccessor.HttpContext.Session.Get("UserDetail") != null)
return JsonConvert.DeserializeObject<UserDetail>(HttpContextAccessor.HttpContext.Session.GetString("UserDetail"));
return null;
}
set
{
HttpContextAccessor.HttpContext.Session.SetString("UserDetail", JsonConvert.SerializeObject(value));
}
}
如果此UserDetails為null,則用戶將被踢出登錄屏幕。 有什么我想念的嗎? 我是否需要添加其他配置?
大衛先生,謝謝你
你在sql server上設置了ASPState嗎?
此鏈接可能有助於您設置ASPState。
或按照以下步驟操作:
打開命令提示符並找到以下路徑:
C:\\ WINDOWS \\ Microsoft.NET \\ Framework \\ v2.0.50727基於您的操作系統版本和.NET版本使用以下語句:
使用默認ASPState數據庫和SQL安全性時,請鍵入以下命令:
aspnet_regsql -S serverName -U UserName -P Password -ssadd -sstype p
使用默認的ASPState數據庫和Windows安全性,鍵入以下命令:
aspnet_regsql -S serverName -E -ssadd -sstype p
使用自定義數據庫和SQL安全性,鍵入以下命令:
aspnet_regsql -d TableName -S serverName -U UserName -P Password -ssadd -sstype c
這不起作用的原因是因為我必須在IIS中的應用程序池中啟用加載用戶配置文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.