Anasayfa / Asp.NET MVC / ASP.NET Session State Provider with Redis Cache

ASP.NET Session State Provider with Redis Cache

ASP.NET Session State Provider da Redis Cache kullanımı yapılandıracağım.
İzlenecek adımlar web.config dosyasını düzenlemek, oturum yardımcı sınıfını oluşturmak ve ASP.NET Identity SignInManager’ı özelleştirmektir.
Web.config yapılandırması çok basit:

<system.web>
<sessionState mode="Custom" customProvider="RedisSessionProvider">
<providers>
   <add name="RedisSessionProvider" type="Microsoft.Web.Redis.RedisSessionStateProvider" port="6380" host="" accessKey="" ssl="true" />
</providers>
</sessionState>
</system.web>

Ardından, sonraki adım, oturum özelliklerini içeren oturum yardımcı sınıfını uygulamaktır:

public static class ApplicationSession
{
private static string _userName = "userName";
private static string _email = "email";
private static string _loginDate = "loginDate";
 
public static void Init(string userName, string email)
{
Set(_userName, userName);
Set(_email, email);
Set(_loginDate, DateTime.Now);
}
 
public static string UserName
{
get
{
return Get<string>(_userName);
}
set
{
Set(_userName, value);
}
}
 
public static string Email
{
get
{
return Get<string>(_email);
}
set
{
Set(_email, value);
}
}
 
public static DateTime StartDate
{
get
{
return Get<DateTime>(_loginDate);
}
set
{
Set(_loginDate, value);
}
}
 
private static T Get<T>(string key)
{
return (T) HttpContext.Current.Session[key];
}
 
private static void Set(string key, object value)
{
HttpContext.Current.Session[key] = value;
}
}

Son olarak, ASP.NET Identity SignInManager aracılığıyla oturum verilerinin başlatılması.
ApplicationSignInManager sınıfının PasswordSignInAsync yöntemini geçersiz kılmak gerekir:

public class ApplicationSignInManager : SignInManager<ApplicationUser, string>
{
 
public override Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout)
{
Task<SignInStatus> status = base.PasswordSignInAsync(userName, password, isPersistent, shouldLockout);
 
if (status.Result == SignInStatus.Success)
{
ApplicationUser user = UserManager.FindByName(userName);
ApplicationSession.Init(user.UserName, user.Email);
}
 
return status;
}
}