zoukankan      html  css  js  c++  java
  • Web.Config文件

    一、认识Web.config文件
    Web.config 文件是一个xml文本文件,它用来储存 asp.NET Web 应用程序的配置信息(如最常用的设置asp.NET Web 应用程序的身份验
    证方式),它可以出现在应用程序的每一个目录中。当你通过.NET新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的
    Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置,你可以在该子目录下新
    建一个Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。
    (一).Web.Config是以xml文件规范存储,配置文件分为以下格式
    1.配置节处理程序声明
    特点:位于配置文件的顶部,包含在<configSections>标志中。
    2.特定应用程序配置
    特点: 位于<appSetting>中。可以定义应用程序的全局常量设置等信息.
    3.配置节设置
    特点: 位于<system.Web>节中,控制asp.net运行时的行为.
    4.配置节组
    特点: 用<sectionGroup>标记,可以自定义分组,可以放到<configSections>内部或其它<sectionGroup>标记的内部.
    (二).配置节的每一节
    1.<configuration>节根元素,其它节都是在它的内部.
    2.<appSetting>节此节用于定义应用程序设置项。对一些不确定设置,还可以让用户根据自己实际情况自己设置
    用法:
    I.<appSettings>
    <add key="Conntction" value="server=192.168.85.66;userid=sa;password=;database=Info;"/>
    <appSettings>
    定义了一个连接字符串常量,并且在实际应用时可以修改连接字符串,不用修改程式代码.
    II.<appSettings>
    <add key="ErrPage" value="Error.aspx"/><appSettings> 定义了一个错误重定向页面.
    3.<compilation>节
    格式:
    <compilation
    defaultLanguage="c#"
    debug="true"
    />
    I.default language: 定义后台代码语言,可以选择c#和vb.net两种语言.
    IIdebug : 为true时,启动aspx调试;为false不启动aspx调试,因而可以提高应用程序运行时的性能。一般程序员在开发时设置为
    true,交给客户时设置为false.
    4.<customErrors>节
    格式:
    <customErrors
    mode="RemoteOnly"
    defaultRedirect="error.aspx"
    <error statusCode="440" redirect="err440page.aspx"/>
    <error statusCode="500" redirect="err500Page.aspx"/>
    />
    I.mode : 具有On,Off,RemoteOnly 3种状态。On表示始终显示自定义的信息; Off表示始终显示详细的asp.net错误信息; RemoteOnly表
    示只对不在本地Web服务器上运行的用户显示自定义信息.
    II.defaultRedirect: 用于出现错误时重定向的URL地址. 是可选的
    III.statusCode: 指明错误状态码,表明一种特定的出错状态.
    IV. redirect:错误重定向的URL.
    5.<globalization>节
    格式:
    <globalization
    requestEncoding="utf-8"
    resp
    fileEncoding="utf-8"
    />
    I.requestEncoding: 它用来检查每一个发来请求的编码.
    II.responseEncoding: 用于检查发回的响应内容编码.
    III.fileEncoding: 用于检查aspx,asax等文件解析的默认编码.
    6.<sessionState>节
    格式:
    <sessionState
    mode="InProc"
    stateC
    sqlC
    cookieless="false"
    timeout="20"
    />
    I.mode: 分为off,Inproc,StateServer,SqlServer几种状态
    mode = InProc 存储在进程中特点:具有最佳的性能,速度最快,但不能跨多台服务器存储共享.mode = "StateServer" 存储在状态服务
    器中特点:   当需要跨服务器维护用户会话信息时,使用此方法。但是信息存储在状态服务器上,一旦状态服务器出现故障,信息将丢
    失. mode="SqlServer" 存储在sql server中特点:工作负载会变大,但信息不会丢失.
    II. stateConnectionString :指定asp.net应用程序存储远程会话状态的服务器名,默认为本机
    III.sqlConnectionString:当用会话状态数据库时,在这里设置连接字符串
    IV. Cookieless:设置为true时,表示不使用cookie会话状态来标识客户;否则,相反.
    V. TimeOut:用来定义会话状态存储的时间,超过期限,将自动终止会话.
    7.<authentication>节
    格式:
    <authentication mode="Forms">
    <forms name=".ASPXUSERDEMO" loginUrl="Login.aspx" protection="All" timeout="30"/>
    </authentication>
    <authorization>
    <deny users="?"/>
    </authorization>
    I.Windows: 使用IIS验证方式
    II.Forms: 使用基于窗体的验证方式
    III.Passport: 采用Passport cookie验证模式
    IV.None: 不采用任何验证方式
    里面内嵌Forms节点的属性涵义:
    I.Name: 指定完成身份验证的Http cookie的名称.
    II.LoginUrl: 如果未通过验证或超时后重定向的页面URL,一般为登录页面,让用户重新登录
    III.Protection: 指定 cookie数据的保护方式.
    可设置为: All None Encryption Validation四种保护方式
    a. All表示加密数据,并进行有效性验证两种方式
    b. None表示不保护Cookie.
    c. Encryption表示对Cookie内容进行加密
    d. validation表示对Cookie内容进行有效性验证
    IV. TimeOut: 指定Cookie的失效时间. 超时后要重新登录.
    在运行时对Web.config文件的修改不需要重启服务就可以生效(注:<processModel> 节例外)。当然Web.config文件是可以扩展的。你
    可以自定义新配置参数并编写配置节处理程序以对它们进行处理。
    web.config配置文件(默认的配置设置)以下所有的代码都应该位于
    <configuration>
    <system.web>

    </system.web>
    </configuration>
    之间,出于学习的目的下面的示例都省略了这段xml标记。
    1、<authentication> 节
    作用:配置 asp.NET 身份验证支持(为Windows、Forms、PassPort、None四种)。该元素只能在计算机、站点或应用程序级别声明。<
    authentication> 元素必需与<authorization> 节配合使用。
    示例:
    以下示例为基于窗体(Forms)的身份验证配置站点,当没有登陆的用户访问需要身份验证的网页,网页自动跳转到登陆网页。
    <authentication mode="Forms" >
    <forms loginUrl="logon.aspx" name=".FormsAuthCookie"/>
    </authentication>
    其中元素loginUrl表示登陆网页的名称,name表示Cookie名称。
    2、<authorization> 节
    作用:控制对 URL 资源的客户端访问(如允许匿名用户访问)。此元素可以在任何级别(计算机、站点、应用程序、子目录或页)上声
    明。必需与<authentication> 节配合使用。
    示例:以下示例禁止匿名用户的访问
    <authorization>
       <deny users="?"/>
    </authorization>
    注:你可以使用user.identity.name来获取已经过验证的当前的用户名;可以使用
    web.Security.FormsAuthentication.RedirectFromLoginPage方法将已验证的用户重定向到用户刚才请求的页面.具体的
    3、<compilation>节
    作用:配置 asp.NET 使用的所有编译设置。默认的debug属性为“True”.在程序编译完成交付使用之后应将其设为False(Web.config
    文件中有详细说明,此处省略示例)
    4、<customErrors>
    作用:为 asp.NET 应用程序提供有关自定义错误信息的信息。它不适用于 xml Web services 中发生的错误。
    示例:当发生错误时,将网页跳转到自定义的错误页面。
    <customErrors defaultRedirect="ErrorPage.aspx" mode="RemoteOnly">
    </customErrors>
    其中元素defaultRedirect表示自定义的错误网页的名称。mode元素表示:对不在本地 Web 服务器上运行的用户显示自定义(友好的)信
    息。
    5、<httpRuntime>节
    作用:配置 asp.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。
    示例:控制用户上传文件最大为4M,最长时间为60秒,最多请求数为100
    <httpRuntime maxRequestLength="4096" executi appRequestQueueLimit="100"/>
    6、 <pages>
    作用:标识特定于页的配置设置(如是否启用会话状态、视图状态,是否检测用户的输入等)。<pages>可以在计算机、站点、应用程序
    和子目录级别声明。
    示例:不检测用户在浏览器输入的内容中是否存在潜在的危险数据(注:该项默认是检测,如果你使用了不检测,一要对用户的输入进
    行编码或验证),在从客户端回发页时将检查加密的视图状态,以验证视图状态是否已在客户端被篡改。(注:该项默认是不验证)
    <pages buffer="true" enableViewStateMac="true" validateRequest="false"/>
    7、<sessionState>
    作用:为当前应用程序配置会话状态设置(如设置是否启用会话状态,会话状态保存位置)。
    示例:
    <sessionState mode="InProc" cookieless="true" timeout="20"/>
    </sessionState>
    注:
    mode="InProc"表示:在本地储存会话状态(你也可以选择储存在远程服务器或SAL服务器中或不启用会话状态)
    cookieless="true"表示:如果用户浏览器不支持Cookie时启用会话状态(默认为False)
    timeout="20"表示:会话可以处于空闲状态的分钟数
    8、<trace>
    作用:配置 asp.NET 跟踪服务,主要用来程序测试判断哪里出错。
    示例:以下为Web.config中的默认配置:
    <trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" />
    注:
    enabled="false"表示不启用跟踪;
    requestLimit="10"表示指定在服务器上存储的跟踪请求的数目
    pageOutput="false"表示只能通过跟踪实用工具访问跟踪输出;
    traceMode="SortByTime"表示以处理跟踪的顺序来显示跟踪信息
    localOnly="true" 表示跟踪查看器 (trace.axd) 只用于宿主 Web 服务器
    自定义Web.config文件配置
    自定义Web.config文件配置节过程分为两步
    一是在在配置文件顶部 <configSections> 和 </configSections>标记之间声明配置节的名称和处理该节中配置数据的 .NET Framework 类的名称。

      二是在 <configSections> 区域之后为声明的节做实际的配置设置。

      示例:创建一个节存储数据库连接字符串

    <configuration>
     <configSections>
     <section name="appSettings" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </configSections>

     <appSettings>
      <add key="scon" value="server=a;database=northwind;uid=sa;pwd=123"/>
     </appSettings>

     <system.web>
      ......
     </system.web>
    </configuration>
    Web.config文件的中文解释:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration> 所有.NET配置文件所必须的根元素
    <system.web> 实际ASP.NET配置设置的根元素

    <!-- 动态调试编译
    设置 compilation debug="true" 以启用 ASPX 调试。
    否则,将此值设置为 false 将提高此应用程序的运行时性能。
    设置 compilation debug="true" 以将调试符号(.pdb 信息)插入到编译页中。
    因为这将创建执行起来较慢的大文件,所以应该只在调试时将此值设置为 true,而在所有其他时候都设置为false。
    defaultLanguage="c#" 指定动态编译时使用的默认编程语言,它的值可以是compilers标记定义的任何语言。
    tempDirectory 指编译过程中存储文件的目录
    -->

    <compilation defaultLanguage="c#" debug="true" />

    <!-- 自定义错误信息
    设置 customErrors mode="On" 或 "RemoteOnly" 以启用自定义错误信息,
    或设置为 "Off" 以禁用自定义错误信息。 为每个要处理的错误添加 <error> 标记。
    "On" 始终显示自定义(友好的)信息。
    如果没有提供defaultRedirect属性,则用户将看到一般的错误信息.
    "Off" 始终显示详细的 ASP.NET 错误信息。显示全部的错误细节
    "RemoteOnly" 只对不在本地 Web 服务器上运行的用户显示自定义(友好的)信息。
    出于安全目的,建议使用此设置,以便不向远程客户端显示应用程序的详细信息。
    -->

    <customErrors mode="RemoteOnly" />

    使用customErrors 元素,可以配置应用程序响应各种HTTP错误时的行为。
    例如,通过如下代码,当发生404错误时,就可以把页面重新导向一个友好的页面。

    <customErrors defaultRedirect=”standarderror.aspx” mode="remoteonly">
    <error statuscode=”404” redirect=”filenotfound.htm”/>
    </customErrors>

    当发生HTTP错误时,上面的代码将把用户导向standarderror.aspx页面。
    如果错误是代码404(即没有发现文件),将把用户导向filenotfound.htm。
    但是,由于模式设置为remoteonly,所有本地的管理员将会看到真实的错误信息,
    而不是被导向其它的页面,但远程的客户将会看到自定义的错误页面。

    <!-- 身份验证
    此节设置应用程序的身份验证策略。
    可能的模式是 "Windows"、 "Forms"、 "Passport" 和 "None"
    "None" 不执行身份验证。
    "Windows" IIS 根据应用程序的设置执行身份验证 包含全部的IIS身份验证,此外,NTFS在文件和目录上的权限将决定对目录中资源的访问。
    (基本、简要或集成 Windows)。在 IIS 中必须禁用匿名访问。
    "Forms" 您为用户提供一个输入凭据的自定义窗体(Web 页),
    然后在您的应用程序中验证他们的身份。用户凭据标记存储在 Cookie 中。
    使用cookies去指出授权用户。
    "Passport" 身份验证是通过 Microsoft 的集中身份验证服务执行的,
    它为成员站点提供单独登录和核心配置文件服务。
    -->

    <authentication mode="Windows" />

    下面是使用Passport的身份验证的示例。
    在这个对目录进行配置的示例中,如果用户没有提供有效的Passport,则把用户导向login.aspx页面。

    <authentication mode=”Passport”>
    <passport redirectUrl=”login.aspx”/>
    </authentication>

    下面的示例阐明了怎样使用基于窗体的身份验证,以及怎样把有效的用户名和密码保存在配置文件中:

    <authentication mode=”Forms”>
     <Forms name=”SecureApplication” loginUrl=”/secureapplication/custlogin.aspx/”>
      <credentials passwordFormat=”Clear”>
       <user name=”admin” password=”admin”/>
      </credentials>
     </forms>
    </authentication>

    <!-- 授权
    此节设置应用程序的授权策略。可以允许或拒绝不同的用户或角色访问应用程序资源。
    通配符: "*" 表示任何人,"?" 表示匿名(未经身份验证的)用户。
    -->

    <authorization>
     <allow users="*" /> <!-- 允许所有用户 -->
     <!-- <allow users="[逗号分隔的用户列表]"
     roles="[逗号分隔的角色列表]"/>
     <deny users="[逗号分隔的用户列表]"
     roles="[逗号分隔的角色列表]"/>
     -->
    </authorization>

    <!-- 应用程序级别跟踪记录
    应用程序级别跟踪为应用程序中的每一页启用跟踪日志输出。
    设置 trace enabled="true" 可以启用应用程序跟踪记录。
    如果 pageOutput="true",则 在每一页的底部显示跟踪信息。
    否则,可以通过浏览 Web 应用程序根目录中的 "trace.axd" 页来查看应用程序跟踪日志。
    -->

    <trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" />

    默认状态下,trace元素处于激活状态,但是它的输出没有显示给Web页面。
    在trace元素中也可以定义侦听器,侦听器其实是一些对象,使用那些对象,可以收听、收集和发送各种消息。
    下面代码中定义的侦听器可以把跟踪信息写到日志文件(即文本文件中):

    <trace enabled="true" requestLimit=”10” pageOutput=”false”>
     <listeners>
      <add name=”TraceListener” type=”System.Diagnostics.TextWriterTraceListener,System”
       initializeData=”TraceListener.log”/>
     </listeners>
    </trace>

    <!-- 会话状态设置
    默认情况下,ASP.NET 使用 Cookie 来标识哪些请求属于特定的会话。
    如果 Cookie 不可用,则可以通过将会话标识符添加到 URL 来跟踪会话。
    若要禁用 Cookie,请设置 sessionState cookieless="true"。
    -->

    默认状态下,ASP.NET通过发送用户cookies(当用户关闭他们的浏览器时,cookies将终止),对会话状态进行维护。

    <sessionState mode="InProc" 指ASP.NET会话状态的维护工作是在本地进行的。
    stateConnectionString="tcpip=127.0.0.1:42424"
    sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20"
    />

    <!-- 全球化
    此节设置应用程序的全球化设置。
    -->

    Web站点的用户经常要发送和接收文本,这是文本编码格式的配置,默认是rtf-8。

    <globalization requestEncoding="GB2312" responseEncoding="GB2312" />
    </system.web>

    AppSettings元素

    <appSettings>元素处于<system.web>根配置之外,它是<configuration>部分的一个子元素。
    通过简单的指定一对名称/值,就可以添加配置设置。如:

     <appSettings>
      <add key="websitename" value="My New WebSite"/>
      <add key="welcomemessage" value="Welcome to my new Website,friend!"/>
     </appSettings>
    </configuration>
    ASP.NET中客户端Session状态的存储

    在ASP.NET中客户端的Session信息存储方式分为:Cookie和Cookieless两种。
    ASP.NET默认状态下,在客户端还是使用Cookie存储Session信息的。
    如果我们想在客户端使用Cookieless的方式存储Session信息的方法如下:

    找到当前Web应用程序的根目录,打开Web.Config文件,找到如下段落:
      mode="InProc"
      stateConnectionString="tcpip=127.0.0.1:42424"
      sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
      cookieless="false"
      timeout="20" />

    这段话中的cookieless="false"改为:cookieless="true"
    这样,客户端的Session信息就不再使用Cookie存储了,而是将其通过URL存储。

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

    服务器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服务。

    将服务器Session信息存储在SQL Server中

    启动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信息的。

    接着,我们返回到Web.config文件,修改mode的值改为SQLServer。
    注意,还要同时修改sqlConnectionString的值,格式为:
    sqlConnectionString="data source=localhost; Integrated Security=SSPI;"
    其中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域的方式来维护两边验证的一致性。
    Session信息存在SQL Server中,即使你重起计算机,刚才的Session信息也不会丢失。

  • 相关阅读:
    Gitlab 与 Git Windows 客户端一起使用的入门流程
    怎样把SEL放进NSArray里
    PerformSelector may cause a leak because its selector is unknown 解决方法
    drawRect
    记录常规越狱的判断方法
    网页 js
    UICollectionView 基础
    FMDB的简单使用
    图层的一些基本动画效果
    NSPredicate简单介绍
  • 原文地址:https://www.cnblogs.com/lavenderzh/p/1329769.html
Copyright © 2011-2022 走看看