共用方式為


逐步解說:使用設定檔屬性維護網站使用者資訊

更新:2007 年 11 月

ASP.NET Profile 屬性可讓您的應用程式追蹤並永久儲存使用者專屬資訊。例如,使用者可以指定郵遞區號或最愛的色彩配置,且您的應用程式可以儲存該資訊,並從應用程式中的任何位置擷取該資訊。ASP.NET 會自動將目前使用者 (不管是匿名或已登入的使用者) 與為其使用者帳戶所儲存的個人資訊相符。

本逐步解說會顯示如何將 Profile 屬性加入至您的應用程式,並使用 Profile 屬性為網站造訪者提供個人化的使用經驗。

在瀏覽這份逐步解說期間,您將了解如何執行下列處理:

  • 使用 Profile 屬性設定應用程式。

  • 定義您想要為使用者維護之簡單和複雜的 Profile 屬性。

  • 在您的應用程式中設定和擷取 Profile 值。

  • 使用同時有匿名和已登入使用者的 Profile 屬性。

必要條件

若要完成這個逐步解說,您必須進行下列步驟:

  • Microsoft Visual Web Developer。

  • Microsoft .NET Framework。

  • Microsoft SQL Server Standard Edition。

    您在逐步解說中所建立的 Profile 屬性資訊,將會儲存在 SQL Server Standard Edition 資料庫中。

  • 啟用瀏覽器的 Cookie。

    注意事項:

    如果應用程式設定為不需要使用 Cookie,則 ASP.NET Profile 屬性不用 Cookie 即可運作。不過,在這個逐步解說中,您將使用 Profile 屬性的預設組態設定,該設定會使用 Cookie。

建立並設定網站

如果您已經完成逐步解說:在 Visual Web Developer 中建立基本 Web 網頁中的步驟,在 Microsoft Visual Studio 中建立好網站,便可以使用該網站並跳到下一章節。否則,請依照下列步驟建立新的網站。

若要建立檔案系統網站

  1. 開啟 Visual Studio。

  2. 在 [檔案] 功能表中,指向 [新增],然後按一下 [網站] (或是在 [檔案] 功能表中,按一下 [新網站])。

    [新網站] 對話方塊隨即出現。

  3. 請在 [Visual Studio 安裝的範本] 下方,按一下 [ASP.NET 網站]。

  4. 在最左邊的 [位置] 清單中,按一下 [檔案系統]。

  5. 在最右邊的 [位置] 清單中,輸入您想要用來保存網站之網頁的資料夾名稱。

    例如,輸入資料夾名稱 C:\WebSites。

  6. 在 [語言] 清單中,按一下您想要操作的程式語言。

  7. 按一下 [確定]。

    Visual Web Developer 會建立資料夾和命名為 Default.aspx 的新頁面。

設定設定檔屬性

在您使用 ASP.NET Profile 屬性之前,將會設定您的應用程式,以啟用和定義要為每個使用者追蹤的 Profile 屬性。若要開始進行,您會先建立要由網站為使用者追蹤的單一 PostalCode 屬性。您也會設定 PostalCode 屬性,以便網站可同時為匿名和已登入的使用者追蹤該屬性。

您會先以匿名使用者的身分來操作。在幕後,ASP.NET 會指派給您唯一的匿名 ID,其儲存在電腦的 Cookie 中。ASP.NET 可以使用這個匿名 ID 來設定和取得對您而言是唯一的值。

若要在網站中設定設定檔屬性

  1. 在 [方案總管] 中,判斷網站是否已經有 Web.config 檔。

    如果網站沒有 Web.config 檔,請執行下列步驟:

    1. 在網站名稱上按一下滑鼠右鍵。

    2. 按一下 [加入新項目]。

    3. 在 [Visual Studio 安裝的範本] 下方,按一下 [Web 組態檔]。

    4. 按一下 [加入]。

      名為 Web.config 的新檔案會加入至網站,並在編輯器中開啟。

  2. 將下列 <profile> 項目加入至 Web.config 檔,做為 <system.web> 項目的子系:

    <system.web>
    
      <anonymousIdentification enabled="true" />  <profile>    <properties>      <add name="PostalCode"         type="System.String"         allowAnonymous="true" />    </properties>  </profile>
    
    <!-- other Web.config settings here -->
    </system.web>
    
    注意事項:

    Web.config 檔中的項目會區分大小寫。因此,請確認您完全依照所示複製或輸入項目。

    您已加入下列項目:

    • <anonymousIdentification> 項目,其會指定 Profile 屬性是否只適用於已登入 (已驗證) 的使用者,或同時適用於已登入和匿名的使用者。

      在此情況下,由於您已將 enabled 設定為 true,因此,將會追蹤已登入和匿名使用者的 Profile 屬性資訊。

    • <properties> 項目,其包含所有您正在定義的 Profile 屬性。

    • <add> 項目,其會定義新的 <profile> 項目。

      在此情況下,您已定義了名為 PostalCode 的單一 Profile 屬性。

      當您定義 Profile 屬性時,會使用 .NET Framework 型別類別 (Class) 名稱指定其資料型別,也會指定是否要為匿名使用者追蹤 Profile 屬性。在啟用匿名識別後,您可以額外指定是否要個別為匿名使用者追蹤 Profile 屬性。

      您會為每個想要定義的額外 Profile 屬性,建立新的 add 項目。

      注意事項:

      依照預設,使用者設定檔資訊會儲存在網站之 Application_Data 子目錄中的 SQL Server Standard Edition 資料庫內。在本逐步解說中會使用預設組態。在支援大量使用者的實際執行應用程式中,最好將 Profile 屬性資料儲存在 Microsoft SQL Server 資料庫內。如需詳細資訊,請參閱本逐步解說中稍後所述的「後續步驟」。

設定和取得 PostalCode 屬性

在您已將網站設定為追蹤 Profile 屬性後,可以依照處理一般元件屬性的方法,設定和取得 Profile 屬性。您會在本章節中建立一個網頁,其會顯示如何設定和取得您在先前章節中所定義的 PostalCode 值。

若要建立設定和取得 PostalCode 屬性的網頁

  1. 將名為 Profiles.aspx 的新 Web 網頁加入至您的網站。

  2. 開啟 Profiles.aspx 並切換至 [設計] 檢視。

  3. 從 [工具箱] 的 [標準] 群組中,將下表中所列的控制項拖曳到網頁上,並依照指示設定其屬性:

    控制項

    屬性設定

    TextBox

    ID = textPostalCode

    Button

    ID = SetPostalCode

    Text = 設定郵遞區號

    Label

    ID = labelPostalCode

    Text = (空白)

  4. 切換至 [原始碼] 檢視,如果該屬性不存在,則將下列屬性加入至 [SetPostalCode] 按鈕。

    OnClick="SetPostalCode_Click"
    
  5. 建立 [設定郵遞區號] 的 Click 處理常式,然後加入下列以粗體顯示的程式碼。

    Sub SetPostalCode_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs)
        Profile.PostalCode = Server.HtmlEncode(textPostalCode.Text)    labelPostalCode.Text = Profile.PostalCode
    End Sub
    
    void SetPostalCode_Click(object sender, System.EventArgs e)
    {
        Profile.PostalCode = Server.HtmlEncode(textPostalCode.Text);    labelPostalCode.Text = Profile.PostalCode;
    }
    

    當使用者設定檔已啟用時,ASP.NET 會動態建立名為 Profile 的屬性,該屬性會將使用者設定檔加入至目前的內容。然後,個別的 Profile 屬性會透過 Profile.PostalCode 來提供。

  6. 建立 Page_Load 處理常式,然後加入下列以粗體顯示的程式碼。

    Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
        labelPostalCode.Text = Profile.PostalCode
    End Sub
    
    void Page_Load(object sender, System.EventArgs e)
    {
        labelPostalCode.Text = Profile.PostalCode;
    }
    

    此程式碼會在每次要求網頁時顯示 Profile.PostalCode 值。

測試 PostalCode 設定檔屬性

您現在可以測試在先前章節中所定義的 PostalCode 屬性。

注意事項:

如果您是使用已啟用成員資格的現有網站,請確認您已登出。

若要測試 PostalCode 屬性

  1. 按 CTRL+F5 執行 [Profiles.aspx] 網頁。

    注意事項:

    如果瀏覽器顯示 502 錯誤或表示無法顯示網頁的錯誤,您可能需要設定瀏覽器,使其在本機要求中略過 Proxy 伺服器。如需詳細資訊,請參閱 HOW TO:為本機 Web 要求略過 Proxy 伺服器

  2. 在方塊中輸入郵遞區號,然後按一下 [設定郵遞區號]。

    您所輸入的郵遞區號會顯示在 Label 控制項中。

  3. 關閉瀏覽器以關閉目前的工作階段。

  4. 重新開啟瀏覽器,然後要求 Profiles.aspx 網頁。

    您先前所輸入的郵遞區號會顯示在 Label 控制項中。

先前程序中的最後一個步驟說明了 ASP.NET 儲存 PostalCode 值。當您再次造訪網頁時,ASP.NET 可以根據唯一的匿名 ID 讀取 PostalCode 值。

定義複雜的屬性

先前於本逐步解說的「設定和取得 PostalCode 屬性」一節中,您已建立名為 PostalCode 且儲存為字串的簡單屬性。在本章節中,您將會定義名為 FavoriteURLs 的屬性,該屬性是一個集合。ASP.NET 可以儲存任何型別的 Profile 屬性,不過,您必須在定義 Profile 屬性時提供其他資訊。

若要定義 FavoriteURLs 屬性

  1. 開啟 Web.config 檔。

  2. 將下列反白顯示的項目加入至 profile 項目,該項目是您先前於本逐步解說的「設定設定檔屬性」:

    <anonymousIdentification enabled="true" />
      <profile>
        <properties>
        <add name="PostalCode" 
          type="System.String" 
          allowAnonymous="true" />
        <add name="FavoriteURLs"       type="System.Collections.Specialized.StringCollection"      allowAnonymous="true" />
        </properties>
      </profile>
    

    您已加入名為 FavoriteURLs 的新 Profile 屬性。對於不是簡單型別 (例如,字串或整數) 的 Profile 屬性,您必須指定完整型別。您會在此指定 Profile 屬性將是保存字串的集合。

  3. 儲存並關閉 Web.config 檔。

設定和取得 FavoriteURLs 屬性

使用 FavoriteURLs 屬性 (其為一個集合) 就像是使用任何內容中的集合一樣。在逐步解說的這個部分中,您會藉由加入可讓使用者輸入 URL 的 TextBox 控制項至 Profiles.aspx 網頁,更新這個先前於本逐步解說的<設定和取得 PostalCode 屬性>中所建立的網頁。當使用者按一下 [加入] 時,便會將 URL 加入至 FavoriteURLs 屬性。您也會在下拉式清單 (Drop-Down List) 方塊中,顯示我的最愛 URL 之目前清單。

若要設定和取得 FavoriteURLs 屬性

  1. 在 [Profiles.aspx] 網頁中,加入下列控制項,並依下表中的指示設定其屬性。

    控制項

    屬性設定

    TextBox

    ID = textFavoriteURL

    Button

    ID = AddURL

    Text = Add URL

    ListBox

    ID = listFavoriteURLs

  2. 切換至 [原始碼] 檢視,然後將下列屬性加入至 [Add URL] 按鈕,如果該屬性不存在的話。

    OnClick="AddURL_Click"
    
  3. 建立 [Add URL] 的 Click 處理常式,然後加入下列以粗體顯示的程式碼。

    Sub AddURL_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs)
        Dim urlString As String = _        Server.HtmlEncode(textFavoriteURL.Text)
        If Profile.FavoriteURLs Is Nothing Then
            Profile.FavoriteURLs = New _
                System.Collections.Specialized.StringCollection
        End If
        Profile.FavoriteURLs.Add(urlString)    DisplayFavoriteURLs()
    End Sub
    
    void AddURL_Click(object sender, System.EventArgs e)
    {    
        String urlString = Server.HtmlEncode(textFavoriteURL.Text);
        if(Profile.FavoriteURLs == null)
        {
            Profile.FavoriteURLs = new 
                System.Collections.Specialized.StringCollection();
        }
        Profile.FavoriteURLs.Add(urlString);    DisplayFavoriteURLs();
    }
    
  4. 在 Page_Load 處理常式中,加入下列以粗體顯示的程式碼行。

    Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
        labelPostalCode.Text = Profile.PostalCode
        DisplayFavoriteURLs()
    End Sub
    
    void Page_Load(object sender, System.EventArgs e)
    {
        labelPostalCode.Text = Profile.PostalCode;
        DisplayFavoriteURLs();
    }
    
  5. 加入下列副程式,以在 ListBox 控制項中更新 URL 的顯示。

    Sub DisplayFavoriteURLs()
        listFavoriteURLs.DataSource = Profile.FavoriteURLs
        listFavoriteURLs.DataBind()
    End Sub
    
    void DisplayFavoriteURLs()
    {    
        listFavoriteURLs.DataSource = Profile.FavoriteURLs;
        listFavoriteURLs.DataBind();
    }
    

測試 FavoriteURLs 設定檔屬性

您現在可以測試 FavoriteURLs 屬性。

若要測試 FavoriteURLs 屬性

  1. 若要執行 [Profiles.aspx] 網頁,請按 CTRL+F5。

    一開始,ListBox 控制項中並沒有值。

  2. 在方塊中輸入 URL,然後按一下 [加入]。

    URL 便會加入至 ListBox 控制項。

  3. 重複先前的步驟以加入其他 URL。

  4. 關閉瀏覽器。

  5. 重新開啟瀏覽器,然後開啟 [Profiles.aspx] 網頁。

    請注意,ListBox 控制項中會填入 (Populate) 您在關閉瀏覽器前所輸入的 URL。

在登入期間移轉設定檔屬性

如果使用者先以匿名使用者身分造訪網站,不過後來改為登入,您可能會想保留使用者在匿名時所建立的屬性設定。一個典型的範例是購物網站,使用者可能會以匿名使用者身分在網站中瀏覽,並將項目加入至購物車,然後在結帳時才登入。為了在使用者登入時保留其值,您可以將使用者從目前的匿名使用者設定檔,移轉至當做已登入使用者 (已驗證) 時所具有的使用者設定檔。

在本章節中,您將會移轉使用者的 PostalCode 設定。您必須有已經設定為利用使用者識別且具有登入頁面的網站。如果您使用的網站還沒有設定好成員資格,請使用下列程序加以啟用。如果您的網站已支援成員資格,便可跳到下一章節。

若要設定網站的成員資格

  1. 在 Visual Studio 中,於 [網站] 功能表內按一下 [ASP.NET 組態]。

    便會出現 [網站管理工具]。

  2. 按一下 [安全性] 索引標籤。

  3. 按一下 [安全性],然後在 [使用者] 底下,按一下 [選取驗證類型]。

  4. 選取 [從網際網路],然後按一下 [完成]。

    [從網際網路] 選項會指定您的應用程式將使用表單驗證,也就是使用者會透過登入頁面登入至應用程式。

  5. 在 [安全性] 索引標籤上的 [使用者] 底下,按一下 [建立使用者],然後建立使用者帳戶。

    您可以使用任何名稱和密碼,但請務必記住該名稱和密碼。您可以使用自己的電子郵件地址 (您將不會在本逐步解說中傳送電子郵件訊息)。

  6. 在完成使用者帳戶定義後,請關閉 [網站管理工具]。

  7. 從 [工具箱] 的 [登入] 群組中,將 Login 控制項和 LoginName 控制項拖曳到網頁上。

    LoginName 控制項不是登入時所需要的,不過可以讓您看到目前已登入。

建立移轉處理常式

若要將匿名使用者之設定移轉至已登入使用者的設定,必須在使用者的識別 (Identity) 變更時執行移轉。ASP.NET 會提供完全做此用途的 MigrateAnonymous 事件;在 MigrateAnonymous 事件的處理常式中,您可以轉移想要保留的設定。

若要建立移轉處理常式

  1. 在 [方案總管] 中,以滑鼠右鍵按一下網站名稱,然後再按一下 [加入新項目]。

  2. 在 [Visual Studio 安裝的範本] 下方,按一下 [全域應用程式類別],然後按一下 [加入]。

    您不需要輸入名稱,因為該檔案一定會命名為 Global.asax。

  3. 輸入下列程式碼,以建立 MigrateAnonymous 事件的新處理常式。

    Sub Profile_MigrateAnonymous(ByVal sender As Object, _
        ByVal e As ProfileMigrateEventArgs)
        If Profile.GetProfile(e.AnonymousID).PostalCode <> "" Then
            Profile.PostalCode = _
                Profile.GetProfile(e.AnonymousID).PostalCode
        End If
    End Sub
    
    void Profile_MigrateAnonymous(Object sender, 
            ProfileMigrateEventArgs e)
    {
        if(Profile.GetProfile(e.AnonymousID).PostalCode != String.Empty)
        {
            Profile.PostalCode = 
                Profile.GetProfile(e.AnonymousID).PostalCode;
        }
    }
    

    該程式碼會取得匿名使用者的使用者設定檔,並擷取 PostalCode 值。然後,它會取得新使用者識別的設定檔,並為該識別設定對等值。

測試移轉

為了測試移轉,您會先以匿名使用者身分進行一些設定,然後登入並查看這些值是否有保留。

若要測試移轉

  1. 開啟 [Profiles.aspx] 網頁,然後按 CTRL+F5 加以執行。

    LoginName 控制項不會顯示任何東西,因為您還沒有登入。

  2. 如果郵遞區號沒有顯示在網頁上,請輸入新的郵遞區號,然後按一下 [設定郵遞區號]。

    您目前之匿名識別的郵遞區號便會顯示在網頁上。

  3. 使用您先前於本逐步解說之<在登入期間移轉設定檔屬性>中所建立的使用者名稱和密碼來登入。

    LoginName 控制項會顯示您的使用者名稱。您以匿名使用者身分所輸入的郵遞區號仍會顯示,因為郵遞區號設定已經移轉至您的已登入使用者設定檔。

後續步驟

在本逐步解說中,說明了在 Web 應用程式中設定和使用 Profile 屬性的基本程序。您可以在應用程式中將 Profile 屬性用於許多用途,下列清單建議了適合使用 Profile 屬性的其他區域:

  • 將 Profile 屬性群組在一起,因為將 Profile 屬性當做一個單位來使用會比較容易。

    例如,您可以將名為 Street、City 和 PostalCode 的 Profile 屬性,組織到名為 Address 的群組中。

    如需詳細資訊,請參閱 定義 ASP.NET 設定檔屬性

  • 建立以 Profile 屬性來管理的自訂型別,例如,購物車。

    如需詳細資訊,請參閱 定義 ASP.NET 設定檔屬性

  • 選取不同的設定檔提供者。

    在本逐步解說中,您是將 Profile 值儲存在 SQL Server Standard Edition 資料庫內。在支援大量使用者的實際執行應用程式中,最好將 Profile 屬性資料儲存在使用 SqlProfileProvider 類別的 SQL Server 資料庫內。

    如需詳細資訊,請參閱網站管理工具提供者索引標籤建立 SQL Server 的應用程式服務資料庫

  • 或者,您也可以建立以您自行編碼的格式和儲存媒體來儲存資訊的自訂設定檔提供者。

    如需詳細資訊,請參閱實作設定檔提供者

請參閱

概念

ASP.NET 設定檔屬性概觀

ASP.NET 設定檔提供者