mysql - ASP.NET Core 与 MySQL 的 session

标签 mysql .net-core

我想在asp.net core中自定义 session 提供程序。即自定义 session 提供程序将使用 MYSQL 数据库而不是 SQL Server 我看到 asp.net core 为我们提供了内置方法 AddDistributedSqlServerCache。但这个方法似乎只适用于SQL Server。

有人可以帮我解决这个问题吗?

最佳答案

我在 .NET 5 或 .NET 6 中有以下工作实现(也代表 .NET Core)

添加nuget包Pomelo.Extensions.Caching.MySql

位于Startup.cs中的ConfigureServices顶部

    services.AddDistributedMySqlCache(options =>
    {
        options.ConnectionString = <MySQL CnStr with: Allow User Variables=true; >;
        options.TableName = "WebUserSessions";
        options.SchemaName = <MySQL Database Name>;
    });
    services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromMinutes(180);
        options.Cookie.IsEssential = true;
        options.Cookie.HttpOnly = true;
        options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
        options.Cookie.SameSite = SameSiteMode.Strict;
    });

在配置方法中app.UseSession();

My SQL 表创建脚本:

CREATE TABLE `webusersessions` (
  `Id` varchar(449) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
  `AbsoluteExpiration` datetime(6) DEFAULT NULL,
  `ExpiresAtTime` datetime(6) NOT NULL,
  `SlidingExpirationInSeconds` bigint DEFAULT NULL,
  `Value` longblob NOT NULL,
  PRIMARY KEY (`Id`),
  KEY `Index_ExpiresAtTime` (`ExpiresAtTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

现在您的 session 值存储在 MySQL 表“WebUserSessions”中,因此您可以使用单个 mysql 数据库来存储 session ,从多个服务器为您的客户端提供服务。如果您只有一台服务器,您的用户 session 将在 IIS 应用程序池重新启动或 Linux 服务重新启动时保留。

要在不停机的情况下更新.NET core或.NET 6应用程序,请引用我的回答:https://stackoverflow.com/a/66580629/9659885

关于mysql - ASP.NET Core 与 MySQL 的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52253594/

相关文章:

java - 数据库通过网络服务同步

mysql - 更改一行 mysql 查询中的一个值并更新一个新值

c# - 当我尝试启动 C# 代码时,收到消息 '' 找不到任务 'build'

azure - .NET Core 版本重写后将一项 Azure 应用服务的代码库切换为不同的代码库

asp.net-core - 从 JSON 和环境变量读取配置部分会给出不同的结果

mysql - 如果一个或另一个或两个字段匹配,如何返回 SQL 查询

php - Facebook 第二次验证用户身份

sql - MySQL 选择查询,从动态生成的列中选择位置

c# - 已发布的控制台应用程序上没有 .NET Core 2.0 应用程序设置

c# - 使用条件断点和立即窗口时获取 "Cannot evaluate a security function"