1.首先 Nuget 安装
Newtonsoft.Json
RedisSessionProvider
替换成Microsoft.Web.Redis.RedisSessionStateProvider+
StackExchange.Redis.StrongName这个更好
RedisSessionProvider有时候会莫名其妙的没有插入redis-Session
StackExchange.Redis
Owin
2.WebConfig配置
<!-- Redis链接地址(如果开启异步发送TM/Infor 将暂存 要发送的数据)-->
<add name="RedisExchangeHosts" connectionString="172.20.36.81:6379,password=*,allowAdmin=true,connectTimeout=30,connectRetry=3 " />
<sessionState mode="Custom" customProvider="RedisSessionProvider">
<providers>
<add name="RedisSessionProvider" type="RedisSessionProvider.RedisSessionStateStoreProvider, RedisSessionProvider" />
</providers>
</sessionState>
<!--机器码,用于分布式(需要支持跨域)多台 机器必须一致,否则Owin登录验证会失败-->
<machineKey validationKey="18A251C37D7E8EF5A3BE49252553AF7C3C7C3DD49692E19D43BA55686B97E5488C727897BA8FE11C4BE44D621B723314EF6A006C07AA80682F75332D51EFB4C4" decryptionKey="2E5F65E687C77A6A4CAC82235F1D833EEA3951A995697FD9FBAB9EAF73A1C2FF" validation="SHA1" decryption="AES" />
3.Global.aspx-Application_Start() 配置
#region Session 分布式插件
var RedisConStr = System.Configuration.ConfigurationManager.ConnectionStrings["RedisExchangeHosts"]?.ConnectionString;
StackExchange.Redis.ConfigurationOptions redisConfigOpts = ConfigurationOptions.Parse(RedisConStr);
RedisSessionProvider.Config.RedisConnectionConfig.GetSERedisServerConfig = (HttpContextBase context) =>
{
return new KeyValuePair<string, StackExchange.Redis.ConfigurationOptions>(
"DefaultConnection",
redisConfigOpts);
};
#endregion
4.使用
设置 Session["AppUser"] = AppUser;
获取ApplicationUser AppUser = (ApplicationUser)Session["AppUser"] ?? null;
配置 Nginx