CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

请教Context的用法

楼主qish69(01军团)2004-08-01 02:09:00 在 .NET技术 / ASP.NET 提问

请教Context的用法,如何利用他在页面之间传递数据,我说的并不是利用Session  
  还有Request.IsAuthenticatedt怎么样去验证用户,Context.Items  
  在提问之前我有看过一些这方面的东东,但是使终还是不明白.比如说.有这样一段代码  
  if   (Request.IsAuthenticated   ==   true)   {    
          
        WelcomeMessage.Text   =   "欢迎"   +    
  Context.User.Identity.Name   +   "!<"   +    
  "span   class=Accent"   +   ">|<"   +   "/span"   +   ">";    
   
        //   如果身份验证模式为   Cookie,则提供一个注销链接    
        if   (Context.User.Identity.AuthenticationType   ==   "Forms")   {    
          LogoffLink   =   "<"   +   "span   class=\"Accent\">|</span>\n"   +    
  "<a   href="   +   Request.ApplicationPath   +    
  "/Admin/Logoff.aspx   class=SiteLink>   注销"   +    
  "</a>";    
        }    
      }    
  我实在无理解其中的代码Request.IsAuthenticated   ==   true  
  这段代码是在验证用户,但是他们的数据从哪里得来了,比方说如果有一登录程序他是验证和数据库的信息是否相等,但是我看这段代码,不知道他到底在验证什么,只知道是在验证用户,那他做比较的用户数据从哪里来了.然后就是Context.User.Identity.AuthenticationType   ==   "Forms"我是想了半天也不明白其中的道理.  
  问题点数:100、回复次数:11Top

1 楼bestfuture(美好未来.NET(CRM))回复于 2004-08-01 06:49:20 得分 0

upTop

2 楼devfan(小星)回复于 2004-08-01 07:23:32 得分 0

Request.IsAuthenticated   ==   true  
  判断验证过的用户      
   
  当建立验证票的时候验证的数据就保存在客户端的Cookie中,每次请求都会从客户端传输验证的数据,也就是如果禁止Cookie就不能进行Forms验证  
   
  Context.User.Identity.AuthenticationType   ==   "Forms"  
  说明验证的方式是Forms,而不是其他的如   "windows"Top

3 楼webdiyer(.net资源精华—www.dotneturls.com)回复于 2004-08-01 08:41:50 得分 20

使用Forms身份验证时,如果被验证的用户通过验证,必须用FormsAuthentication.RedirectFromLoginPage或者FormsAuthentication.SetAuthCookie方法将用户的身份验证票保存到Cookie中,Request.IsAuthenticated属性就是检查这个身份验证票是否存在,若存在则返回true(用户已通过验证),否则返回false(用户未通过验证)。Context.User.Identity.Name获取的就是身份验证票中保存的用户的登录名。Top

4 楼fsonly(FSG)回复于 2004-08-01 08:43:51 得分 10

用的是“Forms”验证方式,三种认证方式之一。  
   
  至于Context是Http当前的响应对像,这样在任何地方可以直接使用HttpContext相关的类  
  而不用继承自Web.PageTop

5 楼goody9807(http://goody9807.cnblogs.com)回复于 2004-08-01 09:21:07 得分 30

HttpContext   概述  
   
  公共构造函数  
  HttpContext   构造函数   已重载。初始化   HttpContext   类的新实例。    
   
  公共属性  
  AllErrors   获取在处理   HTTP   请求的过程中累积的错误数组。    
  Application   为当前   HTTP   请求获取   HttpApplicationState   对象。    
  ApplicationInstance   为当前   HTTP   请求获取或设置   HttpApplication   对象。    
  Cache   为当前   HTTP   请求获取   Cache   对象。    
  Current   为当前   HTTP   请求获取   HttpContext   对象。    
  Error   获取在处理   HTTP   请求的过程中累积的第一个错误(如果有)。    
  Handler   为当前   HTTP   请求获取或设置   IHttpHandler   对象。    
  IsCustomErrorEnabled   获取一个值,该值指示是否已为当前   HTTP   请求启用自定义错误。    
  IsDebuggingEnabled   获取一个值,该值指示当前   HTTP   请求是否处于调试模式。    
  Items   获取可用于在   HTTP   请求过程中在   IHttpModule   和   IHttpHandler   之间组织和共享数据的键值集合。    
  Request   为当前   HTTP   请求获取   HttpRequest   对象。    
  Response   为当前   HTTP   响应获取   HttpResponse   对象。    
  Server   获取提供用于处理   Web   请求的方法的   HttpServerUtility   对象。    
  Session   为当前   HTTP   请求获取   HttpSessionState   实例。    
  SkipAuthorization   获取或设置一个值,该值指定   URLAuthorization   模块是否将跳过对当前请求的授权检查。    
  Timestamp   获取当前   HTTP   请求的初始时间戳。    
  Trace   为当前   HTTP   响应获取   TraceContext   对象。    
  User   为当前   HTTP   请求获取或设置安全信息。    
  Top

6 楼qish69(01军团)回复于 2004-08-01 16:15:12 得分 0

关于身份验证的使用不知能否请各位大侠举拿一段具体一点代码来看看.上面虽然都说了,但是个人认为最好有一段这样的代码,才能更好的理解.  
   
  谢谢Top

7 楼devfan(小星)回复于 2004-08-01 18:17:58 得分 40

 
  Asp.net的身份验证有有三种,分别是"Windows   |   Forms   |   Passport",其中又以Forms验证用的最多,也最灵活。  
  Forms   验证方式对基于用户的验证授权提供了很好的支持,可以通过一个登录页面验证用户的身份,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个web应用就会连同这个身份Cookie一起发送到服务端。服务端上的授权设置就可以根据不同目录对不同用户的访问授权进行控制了。  
   
  下面大概的看一下Forms的过程。  
   
  Forms身份验证基本原理:  
   
  一   身份验证  
   
  要采用Forms身份验证,先要在应用程序根目录中的Web.config中做相应的设置:  
   
  <authentication   mode="forms">    
          <forms   name=".ASPXAUTH   "   loginUrl="/login.aspx"   timeout="30"   path=   "/">  
          </forms>    
  </authentication>  
   
  其中<authentication   mode=   "forms">   表示本应用程序采用Forms验证方式。  
  1.   <forms>标签中的name表示指定要用于身份验证的   HTTP   Cookie。默认情况下,name   的值是   .ASPXAUTH。采用此种方式验证用户后,以此用户的信息建立一个FormsAuthenticationTicket类型的身份验证票,再加密序列化为一个字符串,最后将这个字符串写到客户端的name指定名字的Cookie中.一旦这个Cookie写到客户端后,此用户再次访问这个web应用时会将连同Cookie一起发送到服务端,服务端将会知道此用户是已经验证过的.    
   
  再看一下身份验证票都包含哪些信息呢,我们看一下FormsAuthenticationTicket类:  
  CookiePath:   返回发出   Cookie   的路径。注意,窗体的路径设置为   /。由于窗体区分大小写,这是为了防止站点中的   URL   的大小写不一致而采取的一种保护措施。这在刷新   Cookie   时使用  
  Expiration:   获取   Cookie   过期的日期/时间。  
  IsPersistent:   如果已发出持久的   Cookie,则返回   true。否则,身份验证   Cookie   将限制在浏览器生命周期范围内。  
  IssueDate:   获取最初发出   Cookie   的日期/时间。  
  Name:   获取与身份验证   Cookie   关联的用户名。  
  UserData   :获取存储在   Cookie   中的应用程序定义字符串。  
  Version:   返回字节版本号供将来使用。  
   
   
  2.   <forms>标签中的loginUrl指定如果没有找到任何有效的身份验证   Cookie,为登录将请求重定向到的   URL。默认值为   default.aspx。loginUrl指定的页面就是用来验证用户身份的,一般此页面提供用户输入用户名和密码,用户提交后由程序来根据自己的需要来验证用户的合法性(大多情况是将用户输入信息同数据库中的用户表进行比较),如果验证用户有效,则生成同此用户对应的身份验证票,写到客户端的Cookie,最后将浏览器重定向到用户初试请求的页面.一般是用FormsAuthentication.RedirectFromLoginPage   方法来完成生成身份验证票,写回客户端,浏览器重定向等一系列的动作.  
   
  public   static   void   RedirectFromLoginPage(   string   userName,   bool   createPersistentCookie,   string   strCookiePath   );  
   
  其中:  
  userName:   就是此用户的标示,用来标志此用户的唯一标示,不一定要映射到用户账户名称.  
  createPersistentCookie:   标示是否发出持久的   Cookie。  
  若不是持久Cookie,Cookie的有效期Expiration属性有当前时间加上web.config中timeout的时间,每次请求页面时,在验证身份过程中,会判断是否过了有效期的一半,要是的话更新一次cookie的有效期;若是持久cookie,Expiration属性无意义,这时身份验证票的有效期有cookie的Expires决定,RedirectFromLoginPage方法给Expires属性设定的是50年有效期。  
  strCookiePath:   标示将生成的Cookie的写到客户端的路径,身份验证票中保存这个路径是在刷新身份验证票Cookie时使用(这也是生成Cookie的Path),若没有strCookiePath   参数,则使用web.config中   path属性的设置。  
   
  这里可以看到,此方法参数只有三个,而身份验证票的属性有七个,不足的四个参数是这么来的:  
  IssueDate:   Cookie发出时间由当前时间得出,  
  Expiration:过期时间由当前时间和下面要说的<forms>标签中timeout参数算出。此参数对非持久性cookie有意义。  
  UserData:   这个属性可以用应用程序写入一些用户定义的数据,此方法没有用到这个属性,只是简单的将此属性置为空字符串,请注意此属性,在后面我们将要使用到这个属性。  
  Version:   版本号由系统自动提供.  
   
  RedirectFromLoginPage方法生成生成身份验证票后,会调用FormsAuthentication.Encrypt   方法,将身份验证票加密为字符串,这个字符串将会是以.ASPXAUTH为名字的一个Cookie的值。这个Cookie的其它属性的生成:Domain,Path属性为确省值,Expires视createPersistentCookie参数而定,若是持久cookie,Expires设为50年以后过期;若是非持久cookie,Expires属性不设置。  
  生成身份验证Cookie后,将此Cookie加入到Response.Cookies中,等待发送到客户端。  
  最后RedirectFromLoginPage方法调用FormsAuthentication.GetRedirectUrl   方法获取到用户原先请求的页面,重定向到这个页面。  
   
  3.   <forms>标签中的timeout和path,是提供了身份验证票写入到Cookie过期时间和默认路径。  
   
  以上就是基于Forms身份验证的过程,它完成了对用户身份的确认。下面介绍基于Forms身份验证的访问授权。  
   
  二   访问授权  
   
  验证了身份,是要使用这个身份,根据不同的身份我们可以进行不同的操作,处理,最常见的就是对不同的身份进行不同的授权,Forms验证就提供这样的功能。Forms授权是基于目录的,可以针对某个目录来设置访问权限,比如,这些用户可以访问这个目录,那些用户不能访问这个目录。  
  同样,授权设置是在你要控制的那个目录下的web.config文件中来设置:  
  <authorization>  
          <allow   users="comma-separated   list   of   users"  
                  roles="comma-separated   list   of   roles"  
                  verbs="comma-separated   list   of   verbs"   />  
            <deny   users="comma-separated   list   of   users"  
                  roles="comma-separated   list   of   roles"  
                  verbs="comma-separated   list   of   verbs"   />  
  </authorization>  
   
  <allow>标签表示允许访问,其中的属性  
  1.   users:一个逗号分隔的用户名列表,这些用户名已被授予对资源的访问权限。问号   (?)   允许匿名用户;星号   (*)   允许所有用户。  
  2.   roles:一个逗号分隔的角色列表,这些角色已被授予对资源的访问权限。  
  3.   verbs:一个逗号分隔的   HTTP   传输方法列表,这些   HTTP   传输方法已被授予对资源的访问权限。注册到   ASP.NET   的谓词为   GET、HEAD、POST   和   DEBUG。  
   
  <deny>标签表示不允许访问。其中的属性同上面的。  
   
  在运行时,授权模块迭代通过   <allow>   和   <deny>   标记,直到它找到适合特定用户的第一个访问规则。然后,它根据找到的第一项访问规则是   <allow>   还是   <deny>   规则来允许或拒绝对   URL   资源的访问。Machine.config   文件中的默认身份验证规则是   <allow   users="*"/>,因此除非另行配置,否则在默认情况下会允许访问。  
   
   
  Top

8 楼qish69(01军团)回复于 2004-08-01 23:38:31 得分 0

楼上的这位兄弟,你给出的回复其实我已在论坛中找到,  
  其实就关于身份验证的贴子我看了很多,其中明白了一些,但是就是一些关键性的东东还是不明白.比方说在web.config里配置了哪个用户可以访问那些资源,那为什么还要有一个角色的概念了..下面我贴出一段在论坛里找出来的一段有代表性的身份验证  
  web.config文件  
  <authentication   mode="forms">    
          <forms   name=".ASPXAUTH   "   loginUrl="/login.aspx"    
   
  timeout="30"   path."/">  
          </forms>    
  </authentication>  
   
  C#代码  
  private   void   Buttonlogin_Click(object   sender,   System.EventArgs   e)  
  {  
            string   user   =   TextBoxUser.Text;   //读取用户名  
            string   password   =   TextBoxPassword.Text;   //读取密码  
            if(Confirm(user,password)   ==   true)   //confirm方法用  
   
  来验证用户合法性的  
          {  
                    string   userRoles   =   UserToRole(user);   //调用  
   
  UserToRole方法来获取role字符串  
                    FormsAuthenticationTicket   Ticket   =   new    
   
  FormsAuthenticationTicket   (1,user,DateTime.Now,                      
   
  DateTime.Now.AddMinutes(30),   false,userRoles,"/")   ;   //建  
   
  立身份验证票对象  
                    string   HashTicket   =   FormsAuthentication.Encrypt    
   
  (Ticket)   ;   //加密序列化验证票为字符串  
                    HttpCookie   UserCookie   =   new    
   
  HttpCookie(FormsAuthentication.FormsCookieName,    
   
  HashTicket)   ;    
  //生成Cookie  
                      Context.Response.Cookies.Add   (UserCookie)   ;   //  
   
  输出Cookie  
                    Context.Response.Redirect    
   
  (Context.Request["ReturnUrl"])   ;   //   重定向到用户申请的初  
   
  始页面  
            }  
          else  
          {  
                  //   用户身份未被确认时的代码  
          }  
  }  
  //此方法用来验证用户合法性的  
  private   bool   Confirm(string   user,string   password)  
  {  
          //相应的代码  
  }  
  //此方法用来获得的用户对应的所有的role用逗号分割的一个字  
   
  符串  
  private   string   UserToRole(string   user)  
  {  
          //相应的代码  
  }  
   
  在以上代码中我不能理解的是如果UserToRole()是提出对应数据表里用户是属于哪个角色的字符串,那么我们怎么知道这个角色对这个资源有访问权限....是通过web.config   但是上面并没有给出能访问的角色字符串来啊~!  
  然后在web.config里不是有一个name的属性吗?,他是设置程序中对应的cookie的名称的,但是我在上面的这段C#的代码中并没找到这个名子啊~!可能是我对上那段代码有错的理解吧~!~!  
   
  我本是一个ASP.NET的初学者,或者有的时候对提问的方式没有撑握好.希望坛子的的朋友,兄弟不要见意,也希望高手们能尽量理解我的意思,并给出出色的回答,最后能附上一个典型的实例代码(验证一个从数据库提出来的用户是否对某个资源有访问权,有的话就进入,没有就回到原页).........  
   
  对于此问题我只求找到一个答案,我会不断的为些贴加分,只能有哪位高手帮忙解开我心中的不解为止.  
   
  Top

9 楼qish69(01军团)回复于 2004-08-02 15:34:03 得分 0

怎以好像没有人看此贴啊~!  
   
  up  
  顶上去.Top

10 楼qish69(01军团)回复于 2004-08-02 15:34:20 得分 0

upTop

11 楼webdiyer(.net资源精华—www.dotneturls.com)回复于 2004-08-02 15:46:40 得分 0

楼主可以到http://www.asp.net去下载一个官方论坛看看它的源代码中身份认证部分,看过后应该就懂了。Top

相关问题

  • &*用法~~
  • setfocus的用法
  • icmp.dll的用法
  • Recordset的用法。
  • DataGrid的用法?
  • CDONTS.dll的用法???
  • EnumChildWindows的用法?
  • ListView的用法?
  • Request.QueryString的用法?
  • CMSComm的用法?

关键词

  • asp.net
  • c#
  • 验证
  • 用户
  • 属性
  • 页面
  • 代码
  • 有效期
  • 客户
  • 授权

得分解答快速导航

  • 帖主:qish69
  • webdiyer
  • fsonly
  • goody9807
  • devfan

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo