【问题标题】:SQLServer SessionStateSQLServer 会话状态
【发布时间】:2013-02-19 20:53:10
【问题描述】:

我正在使用 SessionState 的 InProc 模式,但由于应用程序池的回收,我的应用程序不断重启,因此我正在失去当前登录用户的会话。我想更改以将其保存在数据库中。我像这样编辑了我的网络配置

<sessionState mode="SQLServer" timeout="20" allowCustomSqlDatabase="true"
    sqlConnectionString="Data Source=Server;integrated security=True;Initial Catalog=SerialTracker;"
    cookieless="false" />

我必须为会话状态或新数据库创建一些表吗?我的主机是共享的,所以我无法访问管理控制台或其他任何东西。

【问题讨论】:

    标签: iis-7 session-state sql-session-state


    【解决方案1】:

    自 2015 年起,您无需运行脚本,Universal Provider 包使用 Entity Framework 创建所需的表。

    我使用 NuGet/Package Manager 安装了“Microsoft ASP.NET Universal Providers”包(当前为 v 2.0.0),该包还安装了 Core:

    安装包 Microsoft.AspNet.Providers

    它会在您的 web.config 文件中插入一些(已注释的)项目。我按照评论中的说明将“InProc”更改为“自定义”,并使用我的数据库的连接字符串进行设置。首次运行时,它会在我的数据库中创建一个“会话”表并将会话数据存储在其中。

    如果您的项目中已经有一个“会话”表,我不确定它会做什么。

    ps - 我删除了它插入的“profile”、“membership”和“rolemanager”标签,因为我只需要存储会话内容,而不需要存储 asp 身份的其余部分。

    【讨论】:

      【解决方案2】:

      是的,您必须使用可以找到的 InstallSqlState.sql 脚本 - 根据机器 - 在 %System Drive Letter%/Microsoft .NET/Framework/%v.????%

      示例:c:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallSqlState.sql

      还要考虑脚本创建一个 AspState DB,默认情况下不会保留会话数据:这些数据将存储在 tempdb 表中。

      如果这些对您不利,可以在 AspState DB 中保存数据,看看here。

      【讨论】:

        【解决方案3】:

        有一个分步操作方法可用here。看来您需要在数据库上运行一个名为 InstallSqlState.sql 的 SQL 文件。

        【讨论】:

        • 同时此文件包含注释,您不应该直接执行它,而是使用 aspnet_reqsql.exe,如下所述:msdn.microsoft.com/en-us/library/ms178586%28v=vs.100%29.aspx
        • 我接受了脚本的建议并通过 Visual Studio 命令行运行它,而不是直接运行 SQL 脚本。例如,为了在我的本地机器上安装它,我使用了以下行:aspnet_regsql.exe -ssadd -sstype p -S。 -E
        猜你喜欢
        • 2012-03-18
        • 1970-01-01
        • 1970-01-01
        • 2010-11-29
        • 2013-05-03
        • 1970-01-01
        • 2017-04-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多