VS2003中实现身份验证的探索经验

转载请注明出处!!

这几天正在弄ASP.NET, 小试了一下身份验证的实现方法, 在这分享一下.,菜鸟的文章,高手可以略过。

首先,看看基于Forms的验证方式。通过测试,我发现这个验证方式是基于整个WEB应用程序的,也就是基于某个虚拟目录的,一旦通过验证可以访问对应的整个虚拟目录下的所有网页,否则会跳转到默认登陆页面。知道了这个原理,我们就知道这样只能实现目录访问控制,无法实现不同用户访问不同的网页。

这里不涉及数据库读取用户的操作,自己虚拟几个默认用户。

这里先实现虚拟目录访问控制。(这部分MSDN有详细的论述,我也是参考MSDN的)

在 Web.config 文件中配置安全设置

应用程序必须被配置成使用基于窗体的身份验证,将 <authentication> 设置为 Forms 并且拒绝匿名用户访问。下面的示例说明如何在所需应用程序的 Web.config 文件中完成此配置:

1. 插入 <Forms> 标记,并填入相应的属性。(有关这些属性的更多信息,请参考 MSDN 文档或快速入门文档,这些文档在 参考 一节中列出。)复制以下代码,然后在“编辑”菜单中单击“粘贴为 HTML”,将该代码粘贴到文件的 <authentication> 部分:
<authentication mode="Forms">
   <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
   protection="All" path="/" timeout="30" />
</authentication> 
					
2. <authorization> 部分中拒绝匿名用户的访问(如下所示):
<authorization>
   <deny users ="?" />
   <allow users = "*" />
</authorization>
					
配置了应用程序后,需要提供一个登录页。下面的示例显示了一个简单的登录页。示例在运行时要求 Default.aspx 页。未授权的请求被重定向到登录页 (Login.aspx),此页显示一个简单的窗体,提示用户输入电子邮件地址和密码。(使用 Username="jdoe@somewhere.com" 和 Password="password" 作为凭据。)

验证了凭据后,应用程序调用下列内容:

FormsAuthentication.RedirectFromLoginPage(UserEmail.Value, PersistCookie.Checked);
C#

这将用户重定向回当初请求的 URL。不想执行重定向的应用程序可以或者调用 FormsAuthentication.GetAuthCookie 来检索 Cookie 值,或者调用 FormsAuthentication.SetAuthCookie 将正确加密的 Cookie 附加到输出的响应中。对于提供嵌入在包含页中的登录 UI 的应用程序,或者想要更多地控制用户被重定向到的位置的应用程序而言,这些方法很有用。身份验证 Cookie 既可以临时又可以永久(“持久”)。临时 Cookie 只在当前浏览器会话期间保持。当浏览器关闭时,临时 Cookie 随即丢失。永久 Cookie 则被浏览器保存,并在浏览器会话间回发,直到被用户显式删除。

注销方法:

      FormsAuthentication.SignOut();
      Response.Redirect("login.aspx");
这样就完成了一个访问控制的应用程序。

接下来我要实现不同的用户跳转到不同的页面。

首先,要在登陆时创建cookies,然后在用户页面认证cookies是否存在,存在则可以访问否则跳转到登陆页面。这样可以不用基于FORMS的验证。

点击登陆按钮的事件代码:

  private void Button1_Click(object sender, System.EventArgs e)
  {
   if(UserName.Text=="default" && UserPassword.Text=="default")
   {//判断用户

    HttpCookie mycookie2=new HttpCookie("MyTestDefault","MyTestDefault");
    if(PersistCookie.Checked)//判断是否保存cookies
     mycookie2.Expires = new DateTime(2007,10,1);
    mycookie2.Path = FormsAuthentication.FormsCookiePath;
    Response.Cookies.Add(mycookie2); 
    Response.Redirect("default.aspx");
   }
   else
    Label4.Text="用户名或密码无效!";
  }

 

用户页面判断:

  private void Page_Load(object sender, System.EventArgs e)
  {
   if(Request.Cookies["MyTestDefault"]==null)
    Response.Redirect("Login.aspx",true);
   Label1.Text = "这是另一个登入界面,欢迎你: ";
  }

登出:

   Response.Cookies["MyTestDefault"].Expires = DateTime.Now.AddYears(-1); //使cookies失效
   Response.Redirect("Login.aspx",false);

如果有其它用户,则在登陆页面添加判断语句,并在相应的用户页面添加cookies检测的语句。

这样就实现了不同用户跳转到不同页面了。

posted on 2007-03-29 13:00  absolute  阅读(215)  评论(0编辑  收藏  举报

导航