黑哥000

导航

SQLServer DB Session 用MSSQL数据库存放Session

一、利用.NET自身工具创建SQLServerSession的数据库工具位于 Web 服务器上的"系统根目录\Microsoft.NET\Framework\版本号"文件夹中(C:\Windows\Microsoft.NET\Framework64\v4.0.30319)

aspnet_regsql.exe -S 数据库服务器 -U 数据库用户名 -P 密码 -d 要创建的数据库名字 -ssadd -sstype c

Eg.

aspnet_regsql.exe -S 192.168.1.100:7000 -U sa -P woshimima -d DB_SqlSession -ssadd -sstype c

aspnet_regsql.exe -E -d DB_SqlSession -ssadd -sstype c

aspnet_regsql.exe -S .,1433 -U sa -P woshimima -d DB_SqlSession -ssadd -sstype c

aspnet_regsql.exe -S .,1433 -E -d DB_SqlSession -ssadd -sstype c

-S参数:

表示数据库实例名称. 可以用"."表示本机.

-U-P参数:

表示用户名和密码.

-E参数:

可以再-U –P -E中选择一组. –E表示以当前系统用户通过windows身份验证登录数据库, -U -P则是使用SqlServer用户登录数据库.

-ssadd / –ssremove 参数:

-ssadd表示是添加Session数据库, -ssremove表示移除Session数据库.

sstype 参数说明:

t

将会话数据存储到 SQL Server tempdb 数据库中。这是默认设置。如果将会话数据存储到 tempdb 数据库中,则在重新启动 SQL Server 时将丢失会话数据。

p

将会话数据存储到 ASPState 数据库中,而不是存储到 tempdb 数据库中。

c

将会话数据存储到自定义数据库中。如果指定 c 选项,则还必须使用 -d 选项包括自定义数据库的名称。

 

注意:在数据库里面,需要修改“TempGetAppID”这个存储过程,把里面两句“WHERE AppName = @appName”注释掉。修改完存储过程后,需要把ASP.NET网站程序重新启动一下。

  

二、web.config配置

主要就是在 <system.web> 这个节点中 增加 machineKey sessionState 这两个节点,

1.增加machineKey 主要作用是:

按照MSDN的标准说法:对密钥进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证。

也就是说Asp.NET的很多加密,都是依赖于machineKey里面的值,例如Forms 身份验证 CookieViewState的加密。默认情况下,Asp.Net的配置是自己动态生成,如果单台服务器当然没问题,但是如果多台服务器负载均衡,machineKey还采用动态生成的方式,每台服务器上的machinekey值不一致,就导致加密出来的结果也不一致,不能共享验证和ViewState,所以对于多台服务器负载均衡的情况,一定要在每台站点配置相同的machineKey具体可以查一下其它资料。

2.增加 sessionState 主要是让 Session 保存在数据库中。 

具体配置如下:

<machineKey validationKey="99848FFE013A65FE07D6BC01CDC4A7373888781FDEF1536C5B2887BBF5B88B8DF92CA65871936E4A0741C9FE43EC9D93CAD37E0E2D76C9DEA4E1AA6BF73886F1" decryptionKey="81BA385480A26CD78E8E2F6B9D19739F87534F3640B0DB20DDD9607B52FEC9FD" validation="SHA1" decryption="AES" />

 <sessionState mode="SQLServer" sqlConnectionString="Data Source=192.168.1.100,7000;Initial Catalog=DB_SqlSession;Persist Security Info=True;User ID=sa;Password=woshimima"allowCustomSqlDatabase="true" cookieless="false" timeout="300"/>

Timeout单位是分钟

cookieless="false" 表示使用cookie来保存sessionID

posted on 2022-09-08 16:56  黑哥000  阅读(117)  评论(0编辑  收藏  举报