在我们上面的Session模型简介中,大家可以发现Session状态应该存储在两个地方,分别是客户端和服务器端。客户端只负责保存相应网站的SessionID,而其他的Session信息则保存在服务器端。在ASP中,客户端的SessionID实际是以Cookie的形式存储的。如果用户在浏览器的设置中选择了禁用Cookie,那末他也就无法享受Session的便利之处了,甚至造成不能访问某些网站。为了解决以上问题,在ASP.NET中客户端的Session信息存储方式分为:Cookie和Cookieless两种。
ASP.NET中,默认状态下,在客户端还是使用Cookie存储Session信息的。如果我们想在客户端使用Cookieless的方式存储Session信息的方法如下:
这段话中的cookieless="false"改为:cookieless="true",这样,客户端的Session信息就不再使用Cookie存储了,而是将其通过URL存储。关闭当前的IE,打开一个新IE,重新访问刚才的Web应用程序,就会看到类似下面的样子:其中,http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.aspx中黑体标出的就是客户端的Session ID。注意,这段信息是由IIS自动加上的,不会影响以前正常的连接。
配置SQL Server Session方法
以下过程是在Win 2003 SP2 + IIS 6.0, ASP.NET 2.0, SQL Server 2005下进行的。
1. 安装Session数据库
到Framework目录

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
运行下面的命令:

aspnet_regsql.exe -ssadd -sstype c -d [DB] -S [Server] –E
如果想让Session数据库支持所有功能,请运行下面的命令:

aspnet_regsql.exe -ssadd -A all –E
-E是使用Windows认证,也可以使用数据库认证:

aspnet_regsql.exe -ssadd -sstype c -d [DB] -S [Server] –U [User Name] – P [Password]
在指定的SQL Server服务器的指定数据库中建立Session数据库,可以是个单独的数据库,也就是可以是程序所用的数据库,也可以不给名字,那么会使用一个默认的数据库名称。创建完成后,在Sql Server里给上相应的帐号权限。
2. 修改web.config:

<sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="data source=[Server];initial catalog=[DB];user id=[User Name];password=[Password]"

cookieless="false"

timeout="20" />
如果使用默认的数据库名称,如下:

<sessionState mode="SQLServer" sqlConnectionString="data source=[Server];user id=[User Name];password=[Password]"

cookieless="false"

timeout="20" />
这样,程序的Session就会存储到数据库中了,有一点需要注意的是,这样配置以后,存到Session中的对象必须是可序列化的,如果是自定义的类,那么就要加上[Seriablizable]属性。
SessionState2008-06-14 22:45:57随着.net版本不断升级,sessionState配置中需要注意的问题:1、InProc模式不稳定,比如bin目录的文件更改或杀毒软件等都易导致s