C#中FormsAuthentication用法实例

下面是关于“C#中FormsAuthentication用法实例”的完整攻略。

一、什么是FormsAuthentication

FormsAuthentication 是 ASP.NET 提供的一种 Forms 身份验证机制,它使用基于 Cookie 的认证方式来验证用户身份。

在使用 FormsAuthentication 时我们需要进行以下几步:

  1. 创建用户验证后存储到 Cookie 里的票据(token)。该票据包括用户标识(userid)等用户信息。

  2. 询问 ASP.NET 是否已验证用户。

  3. 对于需要验证的页面,反射的检查用户票据是否存在。

二、如何使用FormsAuthentication

在使用 FormsAuthentication 时,我们可以按照以下几个步骤进行操作:

1. 向 Web.config 文件中添加以下代码:

<configuration>
  <appSettings>
    <add key="ValidationKey" value="你的密钥" />
  </appSettings>
  <system.web>
    <authentication mode="Forms" />
    <authorization>
      <deny users="?" />
    </authorization>
  </system.web>
  <system.webServer>
    <modules>
      <remove name="FormsAuthenticationModule" />
      <add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule" />
    </modules>
    <handlers>
      <remove name="FormsAuthentication" />
      <add name="FormsAuthentication" path="*.aspx" verb="GET,HEAD,POST" type="System.Web.Security.FormsAuthenticationModule" preCondition="integratedMode" />
    </handlers>
  </system.webServer>
</configuration>

2. 对用户进行身份验证

我们可以像下面这样,建立登录页面,将用户名和密码通过 Post 方式传递给服务器端进行验证,并创建一个身份验证票证:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    string userName = txtUserName.Text.Trim();
    string password = txtPassword.Text.Trim();

    // 此处进行验证,验证成功后创建一个票证
    if (userName == "user" && password == "123")
    {
        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
            1, // version
            userName, // user name
            DateTime.Now, // issue time
            DateTime.Now.AddMinutes(30), // expires
            false, //persist
            "your custom data"); //other data

        string encTicket = FormsAuthentication.Encrypt(ticket);
        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
        Response.Cookies.Add(cookie);
        Response.Redirect("~/Default.aspx");
    }
    else
    {
        lblMsg.Text = "用户名或密码错误!";
    }
}

3. 在需要验证的页面上进行验证

我们可以在需要验证的页面上,使用以下方法进行身份验证:

if (!Request.IsAuthenticated)
{
    Response.Redirect("Login.aspx");
}

4. 退出登录

我们可以在退出登录或注销的方法中,删除票证即可退出登录。

FormsAuthentication.SignOut();

三、示例说明

示例一:形式简单的登录页面

以 Windows Form 程序为例,在登录窗口上设计两个文本控件(输入用户名和密码)、一个按钮,以及一个标签控件。

在输入用户名和密码后,单击“登录”按钮,如果用户名和密码完成一致,将跳转到本项目中的 Default.aspx 默认页面。

登录窗口的代码如下:

private void btnLogin_Click(object sender, EventArgs e)
{
    string userName = txtUserName.Text.Trim();
    string password = txtPassword.Text.Trim();

    // 此处进行验证,验证成功后创建一个票证
    if (userName == "user" && password == "123")
    {
        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
            1, // version
            userName, // user name
            DateTime.Now, // issue time
            DateTime.Now.AddMinutes(30), // expires
            false, //persist
            "your custom data"); //other data

        string encTicket = FormsAuthentication.Encrypt(ticket);
        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
        Response.Cookies.Add(cookie);
        Response.Redirect("~/Default.aspx");
    }
    else
    {
        lblMsg.Text = "用户名或密码错误!";
    }
}

示例二:ASP.NET Web应用

如果你正在编写一个 ASP.NET 的 Web 应用程序,可以按照以下步骤来使用 FormAuthentication:

  1. 在 Web.config 文件中添加以下内容:
<configuration>
  <system.web>
    <authentication mode="Forms" >
      <forms name=".MyFormAuthentication" loginUrl="~/Login.aspx" timeout="30" slidingExpiration="true"></forms>
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>
  </system.web>
</configuration>
  1. 在 Login.aspx 文件中添加以下内容:
protected void btnSubmit_Click(object sender, EventArgs e)
{
    string userName = txtUserName.Text.Trim();
    string password = txtPassword.Text.Trim();

    // 此处进行验证,验证成功后创建一个票证
    if (userName == "user" && password == "123")
    {
        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
            1, // version
            userName, // user name
            DateTime.Now, // issue time
            DateTime.Now.AddMinutes(30), // expires
            false, //persist
            "your custom data"); //other data

        string encTicket = FormsAuthentication.Encrypt(ticket);
        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
        Response.Cookies.Add(cookie);
        Response.Redirect(FormsAuthentication.DefaultUrl);
    }
    else
    {
        lblMsg.Text = "用户名或密码错误!";
    } 
}
  1. 在需要验证的页面中进行验证:
if (User.Identity.IsAuthenticated)
{
    //获取当前用户标识
    string userName=User.Identity.Name;
}
else
{
    Response.Redirect("~/Login.aspx");
}

这就是使用 FormsAuthentication 的简单示例,它使得开发人员可以轻易地构建身份验证和授权应用程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中FormsAuthentication用法实例 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • 如何使用C# Stopwatch 测量微秒级精确度

    使用C# Stopwatch测量微秒级精确度的完整攻略如下: 步骤 1:导入命名空间 首先,在代码文件的顶部,添加System.Diagnostics 命名空间,以便使用 Stopwatch 类: using System.Diagnostics; 步骤 2:初始化 Stopwatch 创建 Stopwatch 类示例,并调用 Start 方法(或 Rest…

    C# 2023年5月15日
    00
  • C#中DataTable和List互转的示例代码

    下面我将详细讲解“C#中DataTable和List互转的示例代码”的完整攻略。 目录 DataTable转List 1.1 使用ToList扩展方法 1.2 使用反射自动映射 List转DataTable 2.1 使用数据表生成方式 2.2 使用反射自动映射 1. DataTable转List 1.1 使用ToList扩展方法 public static …

    C# 2023年5月31日
    00
  • asp.net 多字段模糊查询代码

    请允许我详细讲解一下实现 ASP.NET 多字段模糊查询的完整攻略。以下是步骤和代码示例: 1. 创建 ASP.NET Web 应用程序 首先,在 Visual Studio 中创建一个 ASP.NET Web 应用程序。选择“Web Application(.NET Framework)”模板,名称为“MultiFieldFuzzySearch”,创建一个…

    C# 2023年5月31日
    00
  • ASP.NET Core Web资源打包与压缩技术介绍

    在ASP.NET Core中,可以使用Web资源打包和压缩技术来提高Web应用程序的性能和加载速度。本文将介绍ASP.NET Core Web资源打包和压缩技术的完整攻略。 步骤 步骤1:安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation包 首先,需要安装Microsoft.AspNetCore.Mvc.R…

    C# 2023年5月17日
    00
  • c# winform 关闭窗体时同时结束线程实现思路

    一、背景 在使用C# Winform编写程序时,有时候我们需要在关闭窗体的时候同时结束线程。但是在代码实现中,由于线程和UI控件属于不同的线程,因此需要注意一些细节问题。下面是具体的实现思路。 二、实现思路 1.启动线程 我们需要在用户打开窗体的时候启动线程。这个步骤可以放在窗体的Load事件中: private Thread workThread; pri…

    C# 2023年6月7日
    00
  • C# Directory.Delete(string path):删除指定目录

    C#中的Directory.Delete(string path)方法是用于删除指定路径下的目录及其所有子目录和文件。 具体用法如下: Directory.Delete(string path); 其中,path是要删除的目录路径。如果目录中有内容(包括子目录和文件),该方法将删除所有内容。 注意事项: 删除的目录必须存在,否则会引发DirectoryNot…

    C# 2023年4月19日
    00
  • C# 键值对数据排序代码

    下面我为大家详细讲解 “C# 键值对数据排序代码”的完整攻略: 1. Sort方法的基本使用 C#中的Dictionary是一个非泛型的键/值对集合,它使用哈希表来实现。由于哈希表的一个重要特性是元素的顺序无法保证,因此在某些情况下,我们可能需要像对List< T>那样对Dictionary进行排序。 Dictionary没有提供Sort或Sor…

    C# 2023年6月8日
    00
  • C#使用Objects Comparer进行对象比较

    下面我来详细讲解C#使用Objects Comparer进行对象比较的完整攻略: Objects Comparer 简介 Objects Comparer是一个开源的C#类库,用于比较对象之间的差异,可以用于排序、枚举等操作。目前的版本是2.1.0,在github上可以找到源码和文档。 安装 可以在Nuget中搜索Objects Comparer,并将其添加…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部