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; } }