zoukankan      html  css  js  c++  java
  • .net session工作原理

    asp.net中的session工作方式分为基于cookie与不基于cookie的两种方式:

    先来看看session在web.config中的配制说明:

    <sessionState mode="Off|InProc|StateServer|SQLServer"

                  cookieless="true|false"

                  timeout="number of minutes"

                  stateC

                  sqlC

                  stateNetworkTimeout="number of seconds"

    />

    1. 必选属性mode:设置将Session信息存储到哪里

    Off 设置为不使用Session功能

    InProc 设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值。

    StateServer 设置为将Session存储在独立的状态服务中。

    SQLServer 设置将Session存储在SQL Server中。

    2. 可选属性:

    (1) cookieless:设置客户端的Session信息存储到哪里

         ture 使用Cookieless模式

         false 使用Cookie模式,这是默认值。

    (2) timeout:设置经过多少分钟后服务器自动放弃Session信息。默认为20分钟

    (3) stateConnectionString:设置将Session信息存储在状态服务中时使用的服务器名称和端口号,例如:"tcpip=127.0.0.1:42424”。当mode的值是StateServer是,这个属性是必需的。

    (4) sqlConnectionString:设置与SQL Server连接时的连接字符串。例如"data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"。当mode的值是SQLServer时,这个属性是必需的。

    (5) stateNetworkTimeout:设置当使用StateServer模式存储Session状态时,经过多少秒空闲后,断开Web服务器与存储状态信息的服务器的TCP/IP连接的。默认值是10秒钟。

    a. mode="InProc": 表示服务器将Session信息存储在IIS进程中,当IIS关闭、重起后,这些信息都会丢失。但是这种模式也有自己最大好处,就是性能最高。因为所有的Session信息都存储在IIS的进程中,所以IIS能够很快的访问到这些信息,这种模式的性能比进程外存储Session信息或是在SQL Server中存储Session信息都要快上很多。这种模式也是ASP.NET的默认方式。

    b. mode="StateServer": 表示服务器将Session信息存储在IIS进程外,当IIS关闭、重起后,这些信息不会丢失。(打开管理工具->服务,找到名为:ASP.NET State Service的服务,启动它。实际上,这个服务就是启动一个要保存Session信息的进程。启动这个服务后,你可以从Windows任务管理器->进程中看到一个名为aspnet_state.exe的进程,这个就是我们保存Session信息的进程).将Session信息存储在进程外的方式不光指可以将信息存储在本机的进程外,还可以将Session信息存储在其它的服务器的进程中。这时,不光需要将mode的值改为StateServer,还需要在stateConnectionString中配置相应的参数。例如你的计算你是192.168.0.1,你想把Session存储在IP为192.168.0.2的计算机的进程中,就需要设置成这样:stateC。当然,不要忘记在192.168.0.2的计算机中装上.NET Framework,并且启动ASP.NET State Services服务

    c. mode="SQLServer": 表示服务器将Session信息存储在SQL,当重起计算机也不会丢失。

    准备工作:启动SQL Server和SQL Server代理服务。在SQL Server中执行一个叫做InstallSqlState.sql的脚本文件。这个脚本文件将在SQL Server中创建一个用来专门存储Session信息的数据库,及一个维护Session信息数据库的SQL Server代理作业。我们可以在以下路径中找到那个文件:[system drive]\winnt\Microsoft.NET\Framework\[version]\ -> 然后打开查询分析器,连接到SQL Server服务器,打开刚才的那个文件并且执行 ->这时,你可以打开企业管理器,看到新增了一个叫ASPState的数据库。但是这个数据库中只是些存储过程,没有用户表。实际上Session信息是存储在了tempdb数据库的ASPStateTempSessions表中的,另外一个ASPStateTempApplications表存储了ASP中Application对象信息。这两个表也是刚才的那个脚本建立的。另外查看管理->SQL Server代理->作业,发现也多了一个叫做ASPState_Job_DeleteExpiredSessions的作业,这个作业实际上就是每分钟去ASPStateTempSessions表中删除过期的Session信息的。

    设置sqlC其中data source是指SQL Server服务器的IP地址,如果SQL Server与IIS是一台机子,写127.0.0.1就行了。Integrated Security=SSPI的意思是使用Windows集成身份验证,这样,访问数据库将以ASP.NET的身份进行,通过如此配置,能够获得比使用userid=sa;password=口令的SQL Server验证方式更好的安全性。当然,如果SQL Server运行于另一台计算机上,你可能会需要通过Active Directory域的方式来维护两边验证的一致性。

    1. 基于cookie的session工作方式:

       cookieless="false"

       工作过程:用户初使化Session -> 分配一个唯一的值作为SessionID -> 将SessionID存储到客户端的cookies中(Documents and Settings\[用户名]\Cookies\Index.dat文件中) -> 服务器处理请求时,跟踞客户端cookies取得SessionID -> 从IIS进程/aspnet_state进程/SQL中取得真实的Session

    2. 不基于cookie的session工作方式:

       cookieless="true"

       工作过程:用户初使化Session -> 分配一个唯一的值作为SessionID -> 将SessionID存储到URL中(http://localhost/Test/(bgfxok49kyu3ic2alki7y386)/default.aspx括号中的即是SessionID) -> 服务器处理请求时,跟踞URL取得SessionID -> 从IIS进程/aspnet_state进程/SQL中取得真实的Session

  • 相关阅读:
    27个提升效率的iOS开源库推荐
    HTTP Authorization
    两种方法删除NSUserDefaults所有记录
    label调整字间距,调整行间距
    iphone手机屏幕大小
    app 图标需要的大小
    多了一层或者多层响应者 如何实现跳转
    用python实现excel中查找指定字符的行信息
    Python 遍历一个目录,输出所有的文件名
    kettle HTTP client
  • 原文地址:https://www.cnblogs.com/buaaboyi/p/2058117.html
Copyright © 2011-2022 走看看