65.9K
CodeProject 正在变化。 阅读更多。
Home

在 ASP.NET 中实现用户配置文件 - 入门指南

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.61/5 (14投票s)

2012 年 7 月 12 日

CPOL

6分钟阅读

viewsIcon

152244

downloadIcon

3624

本文讨论用户配置文件的基础知识。为什么我们需要用户配置文件以及如何在 ASP.NET 中实现用户配置文件。

引言

本文讨论用户配置文件的基础知识。为什么我们需要用户配置文件以及如何在 ASP.NET 中实现用户配置文件。

背景 

提供用户自定义网站外观和风格的网站通常很受用户喜爱。从用户的角度来看,它为网站增添了一点个性化色彩。 

ASP.NET 主题是为用户提供更改网站外观选项的一种方式。它的另一个重要方面是记住回访用户,并根据他们的偏好显示定制的布局。 

用户配置文件用于实现这一点。使用配置文件,我们可以在用户访问之间记住他们,并向他们显示合适的布局/信息。

使用代码

理解基础知识

要实现用户配置文件,我们需要指定一些内容。实现用户配置文件的典型过程将遵循以下步骤:

  1. 首先,我们需要指定用户配置文件将保存在哪里。这可以通过指定配置文件提供程序来完成。
  2. 一旦配置了配置文件提供程序,我们就需要决定要为用户保存哪些信息,即我们需要定义用户配置文件。
  3. 在此之后,我们需要一个机制来唯一地识别用户。如果用户是我们网站的注册用户,这很容易,但如果我们想跟踪所有匿名用户,情况就会变得棘手。
  4. 一旦我们唯一地识别了用户,我们就需要获取他们的偏好并将它们存储在我们的配置文件提供程序中。
  5. 最后但同样重要的是,我们需要一种方法来识别回访用户,并根据他们保存的偏好更改网站的布局。

现在让我们开发一个小应用程序,它将记住用户的姓名和上次访问的时间。 

配置文件的默认设置是它仅适用于已认证的用户,即仅适用于网站的注册用户。我们将看到如何为匿名用户做到这一点。然后我们将看到如何更改它以使用已认证的用户。

注意:此应用程序将包含一个单页网站来演示用户配置文件。典型的实际用户配置文件使用将在更大范围内进行,并且可能与 ASP.NET 主题和/或 Web 部件结合使用。 

配置配置文件提供程序 

配置文件提供程序指定存储用户偏好的位置。通常这是 SqlServer 数据库。这需要在 web.config 文件中完成。 

<profile>
	<providers>
		<add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" 
                applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
	</providers>		
</profile>

上面的设置显示了默认的配置文件提供程序,即位于网站 App_Data 目录中的 SqlServer 数据库。如果我们想指定自定义配置文件提供程序,那么我们需要指定 connectionString 而不是 connectionStringName 来使用适当的数据库。

此外,我们需要设置数据库以接受和保存与配置文件相关的数据。这可以通过对需要用于保存配置文件数据的数据库运行 aspnet_regsql 命令来完成。

指定用户配置文件属性

现在我们已经配置了提供程序,我们需要指定我们需要为用户保存的数据。我们可以通过在 web.config 的 provider 元素中设置属性来实现。因此,让我们在 web.config 中创建条目来跟踪我们上面讨论的所需信息。 

<profile>
	<properties>
		<add name="Name" allowAnonymous="true"/>		
		<add name="VisitedOn" type="System.DateTime" allowAnonymous="true"/>			
	</properties>
</profile>

allowAnonymous="true" 指定匿名用户也应该能够保存他们的配置文件信息。为了使此功能正常工作,我们需要在 web.config 文件中设置 <anonymousIdentification enabled="true"/>

完成此操作后,我们就成功定义了需要跟踪的所有属性作为用户配置文件信息,并且它将适用于已认证用户和匿名用户。

访问和保存配置文件信息

完成此操作后,ASP.NET 框架将为我们的每个配置文件属性创建强类型属性。如果我们想访问这些配置文件属性,我们可以使用 Profile.<PropertyName> 语法来执行此操作。如果我们想访问我们上面定义的属性,我们只需要这样做

string name = Profile.Name;            
DateTime lastVisited = Profile.VisitedOn;

另一部分是保存配置文件信息。要做到这一点,我们可以简单地将新值赋给这些属性,并通过调用 Profile.Save() 使我们的更改永久生效。让我们看看如何用我们的属性来实现这一点。

Profile.Name = TextBox1.Text;
Profile.VisitedOn = DateTime.Now;
Profile.Save();

访问配置文件时要记住的重要一点是,如果用户尚未保存其值,则它们将返回各自类型的默认值。 

让我们的示例应用程序正常工作

在我们正在编写的应用程序中,我们将显示用户名和上次访问时间。对于第一次访问,两者都将是默认值。从下一次开始,如果用户保存了他的名字,它将显示名字,否则它将仅显示上次访问的时间。

让我们看看我们页面的设计视图。

现在,让我们将上面看到的所有代码整合起来以实现所需的功能,我们的代码后台将如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack == false)
    {
        string name = Profile.Name;            
        DateTime lastVisited = Profile.VisitedOn;

        if (name == string.Empty)
        {
            //User has not specified his name
            Label1.Text = "Guest";
        }
        else
        {
            //returning user, show his name
            Label1.Text = name;
        }

        if (lastVisited.ToString() == "1/1/0001 12:00:00 AM")
        {
            Label2.Text = "Never";
        }
        else
        {
            Label2.Text = lastVisited.ToString();
        }
    }
}

protected void Page_UnLoad(object sender, EventArgs e)
{
    Profile.VisitedOn = DateTime.Now;
    Profile.Save();
}
protected void Button1_Click(object sender, EventArgs e)
{
    Profile.Name = TextBox1.Text;
    Profile.Save();
    Label1.Text = TextBox1.Text;
}

现在让我们第一次运行页面。

现在让我们保存我们的偏好并再次运行它。

所以这次我们可以看到它记住了我保存的名字,并且还显示了上次访问时间。用户配置文件已配置并正常工作。

关于 Cookie 的说明

我们看到的所有用户配置文件功能也可以使用 cookies 来实现。这样做将使开发人员拥有完全的控制权。实际上,ASP.NET 会使用 cookies 来跟踪匿名用户的访问。因此,如果我们正在为匿名用户保存配置文件,而用户决定删除他的 cookies ,那么他的偏好将无法访问,即他将不会被识别为回访用户。

关注点

用户配置文件提供了一种识别回访用户的非常好的方法。Cookies 也可以用于相同的目的。但是,使用配置文件,我们不必编写太多代码,如果使用 cookies ,我们会编写很多代码。此外,这种方法比使用 cookies 错误更少。但我仍然认为,全面了解 cookie 对 Web 开发人员来说非常重要。也许我将在另一篇文章中讨论 cookies 。 

本文是从绝对初学者的角度撰写的。希望这有信息量。

历史

  • 2012 年 7 月 12 日:初稿
© . All rights reserved.