zoukankan      html  css  js  c++  java
  • ASP Session的功能的缺陷(进程外的Session)

    目前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:WindowsMicrosoft.NETFrameworkv4.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服务。

  • 相关阅读:
    [Angular 2] Share a Service Across Angular 2 Components and Modules
    [Angular 2] How To Debug An Angular 2 Application
    [Angular 2] Create Shareable Angular 2 Components
    [Angular 2] Import custom module
    [Angular 2] Understanding Pure & Impure pipe
    [Javascript] Manipulate the DOM with the classList API
    [Angular 2] Understanding OpaqueToken
    [Angular 2] Value Providers & @Inject
    [Angular 2] Understanding @Injectable
    [Angular 2] Factory Provider with dependencies
  • 原文地址:https://www.cnblogs.com/jhy55/p/3376925.html
Copyright © 2011-2022 走看看