zoukankan      html  css  js  c++  java
  • .NET的Session使用详解

    对于asp.net的程序来说,session是一个必需要了解的对象。

    下面就对session做一个具体介绍。

    简单来说,Session就是服务器给客户端的一个编号,当一台web服务器运行时,可能是有多个用户都在浏览这台服务器上的网站,当每个用户首次与这台服务器建立连接时,它就与这个服务器建立了一个Session,同时服务器就会自动为其分配一个SessionId,用以标识这个用户的唯一身分,这个Session就是有服务器随机产生的一个由24个字符组成的字符串。

    这个唯一的SessionId还是有很大的实际意义,当一个用户提交表单时,浏览器就会将用户的SessionId自动附加在HTTP头信息中,当服务器处理完这个表单后,就会将结果返回给SessionId所对应的用户。

    如下是Web.config如何配置Session的:
    <configuration>
       <system.web>
         <sessionState mode=" Off | InProc | StateServer | SQLServer "
                            cookieless=" true | false "
                           timeout=" number of minutes "
                           stateConnectionString=" tcpip=server:port "
                           sqlConnectionString=" sql connection string "
                           stateNetworkTimeout=" number of seconds " />
       </system.web>
    </configuration>

    其中各个节点属性:
    mode: Session的存储方式(必有的属性)。
               InProc:将Session存到进程内(这是Default值。)
               off:禁用Session.
               StateServer:将Session存到独立的状态服务中(Asp.net State Service).
               SqlServer:将Session存到SqlServer中。
    Cookieless:设置客户端Session存储的方式。
                     false:使用Cookie模式(default).
                     true:使用Cookieless模式。
    timeout:设置Session过期时间(default is 20 minutes)
    stateConnectionString: 设置Session独立存放的状态服务所在服务器的名称(地址)和端口号,当mode=stateserver时,这个属性就是必须的。
         sqlConnectionString:设置与Sqlserver的连接字符串,当mode="sqlserver"时,这个属性时必须的。
    stateNetWorkTimeout:设置当mode=StateServer时,经过多少秒空闲后,断开web服务器与存储状态信息服务器的TCP/IP连接(default is 10 seconds).

    asp.net中客户端Session的存储。
          asp.net中,默认是使用Cookie存储Session的,如果是将cookieless="false",改成cookieless="true",则session就不用cookie来存储了,而是使用url来存储。

    asp.net服务器端session存储在进程内(inproc)
          当mode="Inproc"时,服务器的Session存储在IIS进程中,当IIS关闭,重启时,这些Session信息就会丢失,但这种模式最大的好处就是性能提高。

          asp.net服务器端Session存储在进程外(StateServer)
         当mode="StateServer"时,服务器的Session就存储在"ASP.NET State Server"这个服务的进程中,在服务中找到名为:&ldquo;ASP.NET State Service&rdquo;的服务,启动这个服务,在资源管理器的进程中就能找到一个名为:&ldquo;aspnet_state.exe"的进程,这个就是我们保存 Session的进程。
          &rdquo;ASP.NET State Server"服务可以与Web服务器分开.eg:web服务器在192.168.0.100上,&ldquo;asp.net state service"服务在192.168.0.101上,则可以进行设置:
         mode="StateServer" stateConnection="tcpip=192.168.1.101:42424".

         asp.net服务器端Session存储到SQLServer中(SQLServer),
        当mode="sqlserver"时,服务器的Session就是存储到Sql server中建立一个存储Session的数据库。在
    %windir%\Microsoft.NET\Framework\v2.0.50727 下有个名为: InstallSqlState.sql 的sql脚本文件. 这个脚本是专门用来建存储Session的数据库以及一个维护Session信息数据库的SQL Server代理作业的.

          执行此sql脚本后,会看到一个新增的aspstate数据库,但这个数据库中,只有存储过程,没有用户表,用户表放到了tempdb这个数据库中去了,ASpstateTempSessions和ASPStateTempApplications,Session信息存储到了ASPStateTempApplication存储了asp中Application对象信息。

        另外查看管理->SQL Server代理->作业,会发现多了一个名为:

    ASPState_job_DeleteExpiredSession的作业,这个作业实际上是每分钟去ASPStateTempSession中删除过期的Session信息。

          上面的方法是建立Session数据库的一个”官方“方法,但在实际的应用中一般没这么去建,而是采用另一种方法,使用下面这段命令来自动创建Session数据库:

    aspnet_regsql.exe -S ServerName\InstanceName -U User -P Password -d DBName -ssadd -sstype c

          此命令将在ServerName\InstanceName建立DBName的数据库, 用户存储Session的数据库. 此数据库中包含了存储过程和用户表. 同时在SQL Server代理 -> 作业 中也加入了相应的作业.

          然后在Web.config中设置好配置信息:

    mode="SQLServer" sqlConnectionString="data source=ServerName\InstanceName; Integrated Security=SSPI;"

          "Integrated Security=SSPI;" 是指使用Windows集成身份验证.

           如果使用SQL用户登陆方式. 则在sqlConnectionString中设置好"userid=sa; password=***".

          这样一来就可以将Session存放到SQLServer中了

    StateServer 模式的实质是,把Session 存放在一个单独的进程里,此进程独立于 aspnet_wp.exe 或 w3wp.exe 。启用此服务后,在“任务管理器”中可以看到一个名为 aspnet_state.exe 的进程,下面开始说明一下设置的具体步骤:

    1、修改注册表(关键步骤,如下图)

    运行 regedit → 打开注册表 → 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters 节点 → 将 AllowRemoteConnection 的键值设置成“1”(1 为允许,0 代表禁止)→ 设置 Port (端口号)

    注意事项:

    a)、若ASP.NET State Service 正在运行,修改注册表内容后,则需要重新启动该服务

    b)、注意端口号的键值是以十六进制储存的,可以使用十进制进行修改,42424 是默认的端口

    c)、AllowRemoteConnection 的键值设置成“1”后,意味着允许远程电脑的连接,也就是说只要知道你的服务端口,就可享用你的ASP.NET State Service,即把 Session 存放在你的电脑进程内,因此请大家慎用;键值为“0”时,仅有stateConnectionString 为“tcpip=localhost: 42424”与“tcpip=127.0.0.1:42424”的情况,方可使用ASP.NET State Service

    2、 开启 ASP.NET State Service(如下图)

    右键点击“我的电脑”→ 管理 → 服务与应用程序 → 服务 → 双击“ASP.NET State Service” → 启动(可设为“自动”)

    说明:只要安装了 .Net Framework v1.0/v1.1 ,都拥有此服务。

    3、 更改 Web.config

    打开 Web.config → 找到 <sessionState> 节点内容

    <sessionState

    mode=”InProc”

    stateConnectionString=”tcpip=127.0.0.1:42424″

    sqlConnectionString=”data source=127.0.0.1;Trusted_Connection=yes”

    cookieless=”false”

    timeout=”20″ />

    → 将其改为以下内容

    <sessionState mode=”StateServer” stateConnectionString=”tcpip=192.168.0.2:42424″ timeout=”20″ />

    注意事项:

    a)、设成StateServer 后,必须要有对应的stateConnectionString

    b)、注意 IP 地址(可以是远程计算机 IP、计算机名称、域名)与端口号,端口号需与ASP.NET State Service 的服务端口一致

  • 相关阅读:
    atitit.nfc 身份证 银行卡 芯片卡 解决方案 attilax总结
    atitit.php 流行框架 前三甲为:Laravel、Phalcon、Symfony2 attilax 总结
    Atitit.执行cmd 命令行 php
    Atitit. 图像处理jpg图片的压缩 清理垃圾图片 java版本
    atitit。企业组织与软件工程的策略 战略 趋势 原则 attilax 大总结
    atitit. 管理哲学 大毁灭 如何防止企业的自我毁灭
    Atitit.java的浏览器插件技术 Applet japplet attilax总结
    Atitit.jquery 版本新特性attilax总结
    Atitit. 软件开发中的管理哲学一个伟大的事业必然是过程导向为主 过程导向 vs 结果导向
    (转)获取手机的IMEI号
  • 原文地址:https://www.cnblogs.com/tomkillua/p/1510707.html
Copyright © 2011-2022 走看看