出售域名 11365.com.cn
有需要请联系 16826375@qq.com
在手机上浏览
在手机上浏览

.net core把session存储到sqlserver

发布日期:2020-05-18

在分布式部署中,会话都会放在一个公共存储空间,这里我们把session放到SqlServer。

1、安装工具
dotnet tool install --global dotnet-sql-cache --version 3.1.3

注意:一定要安装和本机.net core版本一致的工具,否则不能用。如果安装错了,就删除重新安装
删除命令:
dotnet tool uninstall --global dotnet-sql-cache

2、创建数据表
dotnet sql-cache create "server=(local);database=SinGooCMS-v1.6;uid=sa;pwd=123" dbo SqlServerCache

上面包括三个部分:
1)    连接字符串
2)    dbo 表示架构
3)    SqlServerCache 是要创建的数据表名

结果如图:

3、配置
在Nuget中安装组件 Microsoft.Extensions.Caching.SqlServer
然后在Startup中配置服务

services.AddDistributedSqlServerCache(option =>
{
    option.ConnectionString = ConfigurtaionServices.DefConnStr;
    option.DefaultSlidingExpiration = TimeSpan.FromDays(1);
    option.SchemaName = "dbo";
    option.TableName = "SqlserverCache";
});
services.AddSession(options =>
{
    //session有效时长:30分钟
    options.IdleTimeout = TimeSpan.FromSeconds(30 * 60);
    options.Cookie.HttpOnly = true;
});

4、其它
测试一个登录,会话已经保存在SqlServer中

5、在.net framework中设置session保存到sqlserver

①、运行Framewor安装目录下的InstallSqlState.sql文件,framework的安装目录为C:/WINDOWS/Microsoft.NET/Framework/...  (例如:C:\Windows\Microsoft.NET\Framework\v4.0.30319)
②、这时会提示错误,因为该应用没有注册。此时需要在命令行下注册该应用,运行如下命令:
aspnet_regsql.exe  -ssadd -sstype p -S <SQL Server IP> -U <User Name> -P <Password>
③、同域名多端口共享登录:
打开数据库ASPState,修改存储过程:TempGetAppID,把“WHERE AppName = @appName”注释掉,回收需要共享的站点应用池即可

该命令对此应用进行了持久化操作。这时会看到ASPState数据库里面多了两张表,ASPStateTempSession就可以用来保存Session。
应用时,需要在webconfig中添加如下配置:
<sessionState mode="SQLServer" allowCustomSqlDatabase-"true" sqlConnectionString="server=<Server IP>;database=<Database Name>;uid=<User Name>;pwd=<Password>;"cookieless="false" timeout="20" />

database配置为数据库存 ASPState