ASP Session的功能的缺陷以及解决方案

转http://www.cnblogs.com/jhy55/p/3376925.html

目前ASP的开发人员都正在使用Session这一强大的功能,但是在他们使用的过程中却发现了ASP Session有以下缺陷:

  • 进程依赖性:ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时,这些信息也就丢失。另外,重起或者关闭IIS服务都会造成信息的丢失。
  • Session状态使用范围的局限性:刚一个用户从一个网站访问到另外一个网站时,这些Session信息并不会随之迁移过去。例如:facebook网站的WWW服务器可能不止一个,一个用户登录之后要去各个频道浏览,但是每个频道都在不同的服务器上,如果想在这些WWW服务器共享Session信息怎么办呢?
  • Cookie的依赖性:实际上客户端的Session信息是存储与Cookie中的,如果客户端完全禁用掉了Cookie功能,他也就不能享受到了Session提供的功能了。

鉴于ASP Session的以上缺陷,微软的设计者们在设计开发 ASP.NET Session时进行了相应的改进,完全克服了以上缺陷,使得ASP.NET Session成为了一个更加强大的功能。

一,Session 描述(解决方案):

在用户发出首个请求时创建直到用户结束回话

1、  SessionStateModule负责产生session

2、  HttpApplication在请求的处理管道中会检查当前的请求是否实现了System.Web.SessionState. IRequiresSessionState 接口,如果实现了则为当前的请求分配一个session

3、  Web.config中配置 <sessionState cookieless=”true“> 则会在URL将当前sessionid带上

4、  Session保存的位置:

  <sessionState mode="InProc | StateServer| SQLServer">
<sessionState stateConnectionString="tcpip=127.0.0.1:42424" mode="StateServer"/>

创建数据库脚本文件在

C:\Windows\Microsoft.NET\Framework\v4.0.30319(v4.0.30319 根据你的 Framework 版本 )

下的:

InstallPersistSqlState.sql 和 InstallSqlState.sql

可以用下面命令在 VS2012 开发人员命令提示 保存Session的数据库

aspnet_regsql -U sa -P 123–ssadd -sstype c -d aspnetdb (:123 是数据库密码)

web.config可以配置成:

<sessionState  sqlConnectionString="server=.;database=aspnetdb;uid=sa;pwd=;" allowCustomSqlDatabase="true"  mode="SQLServer"/>

  执行之后再数据库会有以下类似的数据库

二,将服务器Session信息存储在进程外

首先,让我们来打开管理工具->服务,找到名为:ASP.NET State Service的服务,启动它。实际上,这个服务就是启动一个要保存Session信息的进程。启动这个服务后,你可以从Windows任务管理器->进程中看到一个名为aspnet_state.exe的进程,这个就是我们保存Session信息的进程。

然后,回到Web.config文件中上述的段落中,将mode的值必须有为StateServer 的值。保存文件后的重新打开一个IE,打开SessionState.aspx页面,保存一些信息到Session中。这时,让我们重起IIS,再回到SessionState.aspx页面中查看刚才的Session信息,发现没有丢失。

实际上,这种将Session信息存储在进程外的方式不光指可以将信息存储在本机的进程外,还可以将Session信息存储在其他的服务器的进程中。这时,不光需要将mode的值改为StateServer,还需要在stateConnectionString中配置相应的参数。例如你的计算你是192.168.0.1,你想把Session存储在IP为192.168.0.2的计算机的进程中,就需要设置成这样:stateConnectionString="tcpip=192.168.0.2:42424"。当然,不要忘记在192.168.0.2的计算机中装上.NET Framework,并且启动ASP.NET State Services服务。

===============================个人理解

两种方式  使用状态服务器  在计算机管理的服务中有一个叫  ASP.net 状态服务器

使用方式配置文件中配置

<!--/配置网站的session存储模式-->

<!--<sessionState stateConnectionString="tcpip=127.0.0.1:42424" mode="StateServer">

</sessionState>-->

第二种方式是 使用数据库存session

可以用下面命令安装保存Session的数据库 aspnet_regsql -U sa -P master –ssadd -sstype c -d aspnetdb

这是 framework 安装路径下的 aspnet_regsql.exe 加上/?可以查看参数的说明。

web.config可以配置成: <sessionState sqlConnectionString="server=.;database=aspnetdb;uid=sa;pwd=;" allowCustomSqlDatabase="true" mode="SQLServer"/>

时间: 2024-12-19 08:31:07

ASP Session的功能的缺陷以及解决方案的相关文章

Android Studio上Session &#39;app&#39;: Error Installing APK错误解决方案

我在使用Android Studio的时候,使用自己的魅族(M5 Note)真机调试,运行不成功,提示下面图片中的错误(Session 'app':Error Installing APK). 再经过测试过好几种网上的方法之后,特记录如下,望以后大家少走弯路,希望可以帮助到大家. 可能不同的人使用到的方法都会是下面的不同的方法: 1)连接手机之后,会有显示手机的SDK型号以及API的版本,显示我自己的是魅族M5 Note(Android 6,API23),在我的手机上安装不上,刚开始有人说魅族手

如何理解ASP Session 对象

ASP Session 对象 Previous Page Next Page Session 对象用于存储用户的信息.存储于 session 对象中的 变量握有单一用户的信息,并且对于一个应用程序中的所有页面都是可用的. Session 对象 当您操作某个应用程序时,您打开它,做些改变,然后将它关闭.这很像一次对话(Session). 计算机知道您是谁.它清楚您在何时打开和关闭应用程序.但是在因特网上有一个问题: 由于 HTTP 地址无法存留状态,web 服务器并不知道您是谁以及您做什么. AS

没有对“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files”的写访问权限 的解决方案

问题情况: 在64位机器上运行Web服务,然后在配置好之后测试访问的时候出现如下提示: 具体查看了一下,在C:\Windows\Microsoft.NET\Framework64\v4.0.30319目录下确实没这个文件或目录,试了能找到的别人给的方法,各种改权限之类,没用. 关键一点,这个是在64位运行时,\Framework64\v4.0.30319和\Framework\v4.0.30319目录下结构不一样,把32位目录下的Temporary ASP.NET Files文件夹拷贝到Fram

【转】asp.net 利用Global.asax 捕获整个解决方案中的异常错误

之前做项目的时候都是在每个页面中处理这不同的异常信息,一个页面数下来,很多个try{}catch{}语句块,令整个代码结构有些不够美观. 今天看到一篇帖子,是关于利用全局应用程序类来帮忙获取异常信息,利用 server.Transfer('''')指定接受错误的页面:加上在接受错误页面中利用 server.GetLastError() 获取前一个异常源. Global.asax 中的Application_Error 函数如下: protected void Application_Error(

AJAX跨域调用ASP.NET MVC或者WebAPI服务的解决方案

问题描述 当跨域(cross domain)调用ASP.NET MVC或者ASP.NET Web API编写的服务时,会发生无法访问的情况. 重现方式 使用模板创建一个最简单的ASP.NET Web API项目,调试起来确认能正常工作 public class UserController : ApiController { public UserModel getInfo() { UserModel um = new UserModel(); um.Uid = 5; um.UserName =

【分布式系列】session跨域及单点登录解决方案

Cookie机制 Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息.让我们说得更具体一些:当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器:接着,服务器在向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体(Response Body)中的,而是存放于HTTP响应头(Res

web.py使用session.DiskStore存储session的时候报EOFError异常解决方案

问题原因 由于多个线程同时读写session文件导致有线程的行为被拒绝报错,为了避免这种同时性问题,可以加一些延迟,或者每个线程有自己的副本,最后覆盖唯一的session 解决方案 https://github.com/webpy/webpy/issues/191 https://github.com/webpy/webpy/issues/83 方法一: 修改 session.py 里 session.DiskStore的 __setitem__ 方法 def __setitem__(self,

ASP.NET调用cmd命令提示符拒绝访问解决方案

最近做关于Windows Server POP3服务器的小项目,翻遍网络,也没能找到接口. 值得庆幸的是最终发现了一个控制台接口winpop.exe,也就是用cmd命令提示符与POP3服务器交互. 这样实属无奈之举,用cmd命令效率低不说,而且获取.分析返回信息相当麻烦.然而这还不算什么,最主要的是:B/S模式下,网页程序有权限调用cmd吗?   这里调用cmd,当然不是调用客户机器上的cmd,而是服务器上的cmd,这样心里还有点底. 小心翼翼的在我电脑上做了实验,成功在aspx页面中调用cmd

DevExpress v15.1:ASP.NET WebForms功能增强(三)

下载最新版DevExpress ASP.NET Controls v15.1.5 ASP.NET HTML Editor 占位符(邮件合并) 占位符允许最终用户创建文本模板,这些占位符可以被替换为所需的值(从数据库). 标签检查器(文档结构路径导航)和所选的标签属性编辑器 新的标签检查器允许最终用户浏览一个标签层次结构.删除标签,并使用标签属性编辑器自定义标签属性. 内容元素过滤 DevExpress HTML Editor现在允许您过滤内容元素,您可以指定标签.属性和样式属性的过滤规则. 增强