3、Session
Session数据保存在服务器端中。每个客户端的相关session都独立存储,因为SessionId以cookie的方式保存在浏览器的缓存中。并且保存到整个的会话过程中,直到浏览器关闭。还要说下这个SessionId,如果你认真的去研究HTTP报文请求头你会发现使用session的时候,每次浏览器都会像服务器发送一个sessionid的cookie,这也就说明了sess的实现是跟cookie相关的。
在一般处理程序中使用Session必须实现标记接口IRequireSessionState,实现了这个接口,服务器也就会自动产生一个sessionId。
还有一个方法是销毁session的:session.Abandon()。
一般情况我们都只使用进程内的session,session还可以保存到进程外,主要有2种方式:
进程外Session设置:
1、StateServer:这个是存储在另一个进程中,使用这个方法必须启用 asp_net状态服务,使用它很简单只要修改网站配置文件
<sessionstate mode="StateServer" stateConnectionString="tcpip=localhost:42424">
端口号默认为42424,如果想改为其他端口注册表修改就OK了:
注册表路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters
AllowRemoteConnection:是否允许远程连接请求。
port:端口号。
如果关闭或者重启asp_net状态服务,session就会清除。
2、 存储在数据库中 sqlserver:sqlserver又提供了2种方法,一个是临时存储,一个是永久存储的。使用 aspnet_regsql.exe这个程序配置位于 c:\WINNT\Microsoft.NET\Framework\v4.0.30319\ 或者直接在dos中输入也OK。
这个文件夹内微软提供了2套的脚本
临时存储:InstallSqlState.sql
永久存储: InstallPersistSqlState.sql(需要SQLSERVERAgent服务调度作业,需要打开sql代理。)
配置: <sessionState mode="SQLServer" sqlConnectionString="data source=.;userid=sa;password=" cookieless= "false" />
看下配置图:
配置完成之后你会发现多了一个数据库,叫做aspnedb,存储session的数据是经过编码后的二进制数。
再来看下 进程内Session丢失的情况:
1、aspnet_wp.exe或w3wp.exe在任务管理器中或其他情况下导致其他进程被终止运行(进程重启)。
2、修改了后台代码(.CS)文件后,重新编译过后丢失,(如果只编译一次的话,有时候不会丢失)。
3、修改了web.config配置文件。
4、win2003环境下,应用程序池被回收、停止后重启。
5、服务器上的bin目录动态链接库(dll文件)被更新。
6、最后一种就是存放了session的电脑被重启。(这是肯定的谁都知道。)
4、 Application
Application:在服务端中保存数据共享的一种方式,在服务器端有且只有一个,第一次访问便创建。整个应用程序网站只有一个,像网站的访问量啊等等可以用这个实现。这个一般应该不常用,除非一些数据共享的。
使用前后记得先加锁解锁。 Application.Lock(); Application.UnLock();
本文从百度空间搬家到博客园。