我们正在尝试使用以下web.config行来使会话状态正常工作:

<sessionState 
    mode="SQLServer" 
    stateConnectionString="tcpip=127.0.0.1:42424" 
    sqlConnectionString="Data Source=dbServer;User ID=stateUser;Password='thepassword'" 
    cookieless="false" 
    timeout="20"/>

在dbServer上,我们运行以下命令来设置ASPState db:

aspnet_regsql.exe -S localhost-E -ssadd -sstype p

在webServer上,我们已经启动了ASP.Net状态服务,但是,表ASPStateTempApplications或ASPStateTempSessions中没有显示任何记录,而且看起来非常像会话仍然存储在进程中。

怎么了?状态服务是否应该在数据库服务器上运行?是否安装了IIS,因为尽管安装了.net 3.5.1,但它在该计算机上不可用。

IIS日志显示没有任何失败的迹象。怎么了?

有帮助吗?

解决方案

首先,您无需启动State Service即可使用SQL Server会话状态。忘掉ASP.NET State Service。

您确定您的网站正在创建会话变量吗?仅仅因为您将这些更改放在web.config中,如果您从不使用会话变量,则不会使用它。

其他提示

如果密码周围有真正的引号,请尝试删除它们:

sqlConnectionString="Data Source=dbServer;User ID=stateUser;Password=thepassword"

删除以下行,它没有SQL会话存储功能:

stateConnectionString="tcpip=127.0.0.1:42424" 

你也可以停止国家服务;它是进程外会话状态所必需的,而不是SQL Server会话状态。

此外,SQL Server会话状态要求您在数据库上运行 InstallSqlState.sql ,而不是 aspnet_regsql.exe 。它应该创建一个新的 ASPState 数据库。

写一个小的HttpModule怎么样?当您需要将用户转换到新的代码库时,您可以将其放置到适当的位置。该模块可以对每个页面请求做一些工作来检查用户的会话并决定是否需要放弃它。也许您在首次创建会话时将应用程序版本字符串存储在用户的会话中,并将当前应用程序版本字符串与该字符串进行比较。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top