【问题标题】:ASP.NET store session state in the application databaseASP.NET 在应用程序数据库中存储会话状态
【发布时间】:2020-02-09 22:16:25
【问题描述】:

有一个选项用于配置 ASP.NET 应用程序以将会话信息存储到 SQL Server:https://docs.microsoft.com/en-us/previous-versions/ms178586(v=vs.140)

但是它需要使用一些脚本创建一个新的数据库(ASPState)

我想知道是否有使用应用程序数据库本身提供会话存储的选项,或者是否有任何硬编码要求数据库名称应为 ASPState 并且唯一的选择是创建另一个数据库。

【问题讨论】:

    标签: asp.net sql-server authentication session-state asp.net-session


    【解决方案1】:

    我首先要提到的是,在同一个数据库中混合 aspstate 和 user 对象并不是一个好主意。 aspstate 数据被大量使用,并且可能需要大量 SQL Server 事务日志空间来存储永远不需要恢复的临时数据。最好在SIMPLE 恢复模型中为会话状态提供一个专用数据库,而不是将具有不同恢复要求的数据混合在一起。

    aspstate 数据库的名称是可配置的。为自定义数据库指定 Aspnet_regsql -sstype c 参数,并使用 -d 指定数据库名称。例如:

     C:\Windows\Microsoft.NET\Framework\v4.0.30319\Aspnet_regsql.exe" -ssadd -sstype c -d YourUserDatabase -S YourSqlInstance -E
    

    下面是一个 aspstate 连接字符串示例,给出了上面用于 Windows 身份验证的示例。这可以与您的普通用户数据库连接字符串相同,但在这里我添加了一个显式应用程序名称来唯一化连接字符串,以便会话状态使用单独的连接池。

    Data Source=YourSqlInstance;Initial Catalog=YourUserDatabase;Integrated Security=SSPI;Application Name=aspstate
    

    您还需要授予会话状态使用的存储过程的权限,除非您使用特权帐户(一种不好的做法)。以下是通过角色成员身份执行此操作的脚本:

    USE YourUserDatabase;
    GO
    CREATE Role APSStateRole;
    ALTER  ROLE APSStateRole
        ADD MEMBER [YourUserAccount]; --assuming user already exists
    GRANT EXECUTE ON dbo.TempReleaseStateItemExclusive TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempInsertUninitializedItem TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempInsertStateItemShort TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempInsertStateItemLong TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempUpdateStateItemShort TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempUpdateStateItemShortNullLong TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempUpdateStateItemLong TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempUpdateStateItemLongNullShort TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempRemoveStateItem TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempResetTimeout TO ASPStateRole;
    GRANT EXECUTE ON dbo.GetMajorVersion TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempGetVersion TO ASPStateRole;
    GRANT EXECUTE ON dbo.GetHashCode TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempGetAppID TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempGetStateItem TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempGetStateItem2 TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempGetStateItem3 TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempGetStateItemExclusive TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempGetStateItemExclusive2 TO ASPStateRole;
    GRANT EXECUTE ON dbo.TempGetStateItemExclusive3 TO ASPStateRole;
    GO
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 2012-02-12
      • 2012-07-29
      • 2012-12-13
      相关资源
      最近更新 更多