ASP.NET session 状态 Sql Server 模式

标签 asp.net sql-server session-state

我的问题是关于上面写的标题。目前我有一些依赖 session 来完成工作的功能。当保留默认值时,一切都会顺利进行。但是,我不喜欢在崩溃时丢失 session 的想法,因此我修改了 web.config 以使用 Sql Server 模式。

我已运行必要的命令,使用 aspnet_sql.exe 在数据库中创建表和存储过程

我能够将值存储到数据库中,但尚未成功检索它们。由于它在 InProc 模式下运行良好,我想我可以放心地假设我的代码没有任何问题。

这是我的 web.config 设置:

        <sessionState mode="SQLServer" allowCustomSqlDatabase="true" cookieless="false" timeout="120" sqlCommandTimeout="30" compressionEnabled="true" 
                                sqlConnectionString="Data Source=.\SQLExpress;Initial Catalog=mytest;Persist Security Info=True;User ID=mytest;Password=mytest;"/>

非常感谢您的帮助,提前致谢。

最佳答案

假设您的代码没有错误是不安全的。我想到的一种情况是您正在缓存的对象未标记为 serializable 。通常,这会抛出异常,并且您会意识到这一点。但是,如果您还在 catch block 中抑制异常,那么您似乎能够存储值,但无法检索它们。

为什么突然需要使所有对象可序列化?好吧,当您使用 InProc 时,对象存储在内存中。但是,当您使用 SQL 时,需要将它们写入(也称为序列化)数据库。

在代码中:

try {
    Session["MyKey"] = SomeNonSerializableObject
}
catch (Exception e)
{
    ' Suppress all exceptions 
}

我还要确认您的 ASPState 用户(示例中的 mytest)拥有所需的所有正确权限。测试这一点的简单方法是让他们成为 ASPState 数据库临时数据库的 db_owner。如果这解决了问题,那么您就知道这是数据库权限问题。

我听到你问为什么是 tempdb?好吧,默认情况下, session 状态表将在 tempdb 中创建。

关于ASP.NET session 状态 Sql Server 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5408197/

相关文章:

c# - 从 iframe 内的按钮打开菜单列表

sql - 何时在 SQL Server 数据仓库中使用用户定义的函数

asp.net - 共享2个应用程序: Session State Deserialization Error for ASP.Net MVC

asp.net - 如何配置RedisSessionStateProvider来使用Redis哨兵?

asp.net-mvc-3 - 是否可以仅在 ASP.NET MVC 中为经过身份验证的用户启用 session 状态?

asp.net - 对好的自动化 Web 负载测试工具有什么建议吗?

asp.net - IIS 7 : Redirect all request to Default. aspx

asp.net - Crystal 报表每页都有动态参数

python - 从 pyodbc 插入 SQL Server 时出现 "Invalid object name"错误

sql-server - CakePHP finderQuery 是否可以与 SQL Server 一起使用?我应该在哪里调试它?