当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > asp.net里面的身份验证和授权

ASP.NET
如何在ASP.NET中使用SmtpMail发送邮件
在VB.NET中利用Split和Replace函数计算字数
Attribute应用:简化ANF自定义控件初始化过程
ASP.NET 2.0移动开发入门之使用样式
ASP.NET 2.0中使用OWC生成图表
ASP.NET 2.0中控件的简单异步回调
一个无法捕获ADO.NET Dataset的内存错误
深入解读ADO.NET2.0的十大最新特性
.Net平台下的分布式缓存设计
ASP.NET全局异常处理浅析
ASP.NET 2.0中文验证码的实现
浅析.NET平台编程语言的未来走向
.net 框架程序设计收藏
使用ASP.NET MVC Futures 中的异步Action
详解.NET中的XmlReader与XmlWriter
关于.NET中的Server push技术
asp.net页面执行机制
对比JSP和ASP.NET的存储过程
.NET 4.0不会包含System.Shell.CommandLine
ASP.NET十个有效性能优化的方法

ASP.NET 中的 asp.net里面的身份验证和授权


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 208 ::
收藏到网摘: n/a

今天闲着无聊.想起来了ASP.NET身份验证.感觉良好.贴出下列代码:
login.aspx HTML代码


<%@ Page language="c#" Codebehind="02Login.aspx.cs" AutoEventWireup="false" Inherits="身份验证._02Login" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>02Login</title>
        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="vs_defaultClientScript" content="javascript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
        <form id="Form1" method="post" runat="server">
            <FONT face="宋体">
                <TABLE id="Table1" style="Z-INDEX: 102; LEFT: 152px; WIDTH: 446px; POSITION: absolute; TOP: 80px; HEIGHT: 72px"
                    cellSpacing="1" cellPadding="1" width="446" border="1">
                    <TR>
                        <TD>
                            <asp:label id="Label1" runat="server">用户名称:</asp:label></TD>
                        <TD>
                            <asp:textbox id="tbName" runat="server" Width="183px"></asp:textbox></TD>
                        <TD>
                            <asp:requiredfieldvalidator id="RequiredFieldValidator1" runat="server" ErrorMessage="用户名不能为空!" ControlToValidate="tbName"></asp:requiredfieldvalidator></TD>
                    </TR>
                    <TR>
                        <TD>
                            <asp:label id="Label2" runat="server">密码:</asp:label></TD>
                        <TD>
                            <asp:textbox id="tbPass" runat="server" Width="183px"></asp:textbox></TD>
                        <TD>
                            <asp:requiredfieldvalidator id="RequiredFieldValidator2" runat="server" ErrorMessage="密码不能为空!" ControlToValidate="tbPass"></asp:requiredfieldvalidator></TD>
                    </TR>
                    <TR>
                        <TD><FONT face="宋体">是否保存Cookie</FONT></TD>
                        <TD>
                            <asp:checkbox id="PersistCookie" runat="server"></asp:checkbox></TD>
                        <TD></TD>
                    </TR>
                </TABLE>
                <asp:button id="btnLoginBetter" style="Z-INDEX: 101; LEFT: 288px; POSITION: absolute; TOP: 240px"
                    runat="server" Width="78px" Text="登录"></asp:button>
                <asp:HyperLink id="HyperLink1" style="Z-INDEX: 103; LEFT: 456px; POSITION: absolute; TOP: 240px"
                    runat="server" NavigateUrl="Default.aspx">HyperLink</asp:HyperLink></FONT>
        </form>
    </body>
</HTML>

login.aspx.cs代码如下

  private void btnLoginBetter_Click(object sender, System.EventArgs e)
  {
   if (this.tbName.Text == "admin" && this.tbPass.Text == "admin")
   {
    FormsAuthenticationTicket ticket = new     FormsAuthenticationTicket(1,this.tbName.Text,DateTime.Now,DateTime.Now.AddMinutes(30),this.PersistCookie.Checked,"User");
    //创建一个验证票据

    string cookieStr = FormsAuthentication.Encrypt(ticket);
    //进行加密

    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,cookieStr);
    //创建一个cookie,cookie名为web.config设置的名,值为加密后的数据cookieStr,

    if (this.PersistCookie.Checked)//判断用户是否选中保存cookie

     cookie.Expires = ticket.Expiration;//获取cookie过期时间

    cookie.Path = FormsAuthentication.FormsCookiePath;//设置cookie保存路径

    Response.Cookies.Add(cookie);
    string strRedirect;
    strRedirect = Request["ReturnUrl"];//取出返回url

    if (strRedirect == null)
     strRedirect = "Default.aspx";
    Response.Redirect(strRedirect,true);

   }
   else
   {
    Response.Write("<script>alert('帐号或密码错误!');self.location.href='02login.aspx'</script>");
   }
  }

Default.aspx HTML代码

<body MS_POSITIONING="GridLayout">
        <form id="Form1" method="post" runat="server">
            <FONT face="宋体">
                <asp:Label id="Label1" style="Z-INDEX: 106; LEFT: 224px; POSITION: absolute; TOP: 72px" runat="server">用户名称:</asp:Label>
                <asp:Label id="Label2" style="Z-INDEX: 102; LEFT: 220px; POSITION: absolute; TOP: 136px" runat="server">身份:</asp:Label>
                <asp:Label id="lbUser" style="Z-INDEX: 103; LEFT: 350px; POSITION: absolute; TOP: 79px" runat="server"></asp:Label>
                <asp:Label id="lbSf" style="Z-INDEX: 104; LEFT: 355px; POSITION: absolute; TOP: 133px" runat="server"></asp:Label>
                <asp:Button id="btnLogout" style="Z-INDEX: 105; LEFT: 261px; POSITION: absolute; TOP: 192px"
                    runat="server" Text="注销" Width="101px"></asp:Button></FONT>
        </form>
    </body>
后置代码

  private void Page_Load(object sender, System.EventArgs e)
  {
   this.lbUser.Text = User.Identity.Name;
   if (User.IsInRole("Admin"))
    this.lbSf.Text = "Admin";
   else
    this.lbSf.Text = "User";
  }

  Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
 
  /**//// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.btnLogout.Click += new System.EventHandler(this.btnLogout_Click);
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

  private void btnLogout_Click(object sender, System.EventArgs e)
  {
   FormsAuthentication.SignOut();//注销票
   Response.Redirect("login.aspx",true);返回login.aspx页面
  }


webconfig配置如下
    <authentication mode="Forms" >
  <forms name=".SecurityDemo" loginUrl="login.aspx">//.SecurityDemo为cookie名,
  </forms>
    </authentication>

 <authorization>
            <deny users="?"/> //拒绝所有匿名用户
            <allow roles="admins"/>//允许管理级别用户访问
   </authorization>
自我感觉ASP写多了,一般是用session进行判断用户是否合法,但在一个ASP.NET项目中使用身份验证,基本上所有页面都要验证才能访问,感觉有点迁强.但可以在web.config页面对指定的页面设置权限,设置代码如下
  <location path="admin.aspx">
    <system.web>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>
如果只有几个页面设置如上代码,感觉还可以接受.但页面多了岂不是要把人累死呀..
可能是小的项目做多了,大项目没接触过.请高手给指点具体用途呀.不甚感激