session本来是个不稳定的东西,经常会被丢失,本来用cookie不错,但又不想对程序做改动。查了查资料,找到了下面一段:
由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定 默认的是下面这个:运行后后面会自动加一串字符 ,不好看,
如下:
在<system.web></system.web>节点中修改或添加配置,有的已经存在,有的还没有存在。
<sessionState mode ="InProc" cookieless ="true" timeout ="20"></sessionState>
改一下cookieless 就行了。
<sessionState mode ="InProc" cookieless ="false" timeout ="20"></sessionState>
想让session不容易丢失,设置的session配置如下(电脑上开启asp.net state 服务):
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20"/>
或者只用 StateServer: <sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" timeout="40"/>
我们会发现sessionState标签中有个属性mode,它可以有3种取值:InProc、StateServer、SQLServer(大小写敏感)。默认情况下是InProc,也就是将Session保存在进程内(IIS5是aspnet_wp.exe,而IIS6是W3wp.exe),这个进程不稳定,在某些事件发生时,进程会重起,所以造成了存储在该进程内的Session丢失。
附:
如果要存储在session里的不是一个简单的类型,那么需要在类上面加 [Serializable] 标识为可序列化,不然会报不可自动序列化的错误。