您的位置:首页 > 编程语言 > ASP

ASP.NET常用信息保持状态学习笔记二

2012-11-16 19:59 459 查看
2012-05-11 22:06

 

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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息