2013-03-05 48 views
1

我使用的是SessionState的InProc模式,但由于应用程序池的回收,我的应用程序仍在继续重新启动,因此我正在丢失当前登录用户的会话。我想要更改以将其保存在数据库中。我编辑我的webconfig像这样SQLServer SessionState

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

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

回答

2

有一个一步一步如何提供here。似乎您将需要在数据库上运行名为InstallSqlState.sql的SQL文件。

+1

与此同时此文件包含注释,您不应该直接执行它,而应使用aspnet_reqsql.exe,如下所述:https://msdn.microsoft.com/en-us/library/ms178586%28v=vs.100 %29.aspx – 2015-08-13 15:09:31

0

是的,你必须使用InstallSqlState.sql脚本,你可以找到 - 根据机器 - 以%系统盘符%/的Microsoft .NET /框架/%V ????%

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

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

如果这些对您不利,那么您可以在AspState数据库中保存数据,看一下here

0

截至2015年,您不需要运行脚本,通用提供程序包使用实体框架来创建它所需的表。

我用过的NuGet /包管理器安装“微软ASP.NET通用提供商”包(目前为v 2.0.0),其中还安装核心:

安装,包装Microsoft.AspNet.Providers

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

我不确定如果你已经在你的项目中有一个'会话'表会怎么做。

ps - 我删除了插入的'profile','membership'和'rolemanager'标签,因为我只需要存储会话内容,而不是其他asp标识。