ASP.NET使用者個人化Profile——配置1

來源:互聯網
上載者:User

  ASP.NET 2.0除了提供了Membership身分識別驗證機制之外,還提供了一種使用者個人化的機制,稱為Profile。Profile可以和Membership結合起來,儲存使用者自訂資料。在Profile中可以儲存各種類型的資料,包括最基本的int、double類型,也可以是複雜的使用者自訂類型,比如購物車、使用者資訊等。

  Profile和Session類似,都是用來儲存使用者自訂資料,但是二者也有本質的區別:

  1.Session只能夠短暫的保留使用者資料(預設為20分鐘),但是Profile可以持久的儲存,因為二者的儲存介質不同,Session預設是存放在記憶體當中的,而Profile是存放在資料庫中。雖然說Session可以通過配置使之儲存在狀態伺服器或者資料庫當中,但還是有很大的區別。

  2.Profile是強型別的,而Session僅僅是一個項集合而已。並且VS對Profile提供了智能感知的支援,使用方便。

 

  下面來看看如何使用Profile,首先第一步和Membership一樣,也是添加資料庫支援,還是和Membership一樣,如果之前按照前面說的添加過了,在這裡直接開始第二步,就是配置。若沒有,則參考前面的文章添加資料庫支援。將下面代碼複製入web.config的system.web節點之下:

<profile enabled="true" defaultProvider="SqlProvider">
  <providers>
      <add name="SqlProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ConnectionString" applicationName="TestMembership"/>
  </providers>
  <properties>
      <add name="test" type="String" allowAnonymous="true"/>
  </properties>
</profile>

 

  這個配置大多數的屬性和Membership中的含義是一樣的,我們只是說明一下特有的屬性。在這個配置當中有Providers和Properties節點,其中Providers節點之前在配置Membership中瞭解過了,現在介紹一下properties節點:

  在這個節點下,add標籤的作用就是添加一個“屬性”,name屬性就是“屬性”的名字,type就是“屬性”的類型,這個類型可以是int、double等單一資料型別,也可以是購物車類等使用者自訂資料類型,不過需要注意的是,如果為“類”類型,則該類必須可以序列化,就是在類的上面添加[Serializable]特性。allowAnonymous這個屬性指定使用者在匿名狀態下,是否可以設定該屬性。

 

  好了,配置完畢,我們就可以在頁面上使用Profile了,建立一個頁面,在頁面上添加一個button雙擊在button的click事件當中寫下如下代碼:

Profile.test = "123123";

  這個Profile.test就是我們在前面properties節點下添加的“屬性”,類型為string類型。

  瀏覽這個頁面,點擊button,看下效果,哈!出錯了!錯誤提示如下:

  設定檔屬性“test”允許匿名使用者儲存資料。這要求啟用 AnonymousIdentification 功能。

 

  這是因為ASP.NET預設情況下不允許匿名使用者,很簡單,我們簡單的設定一下,允許使用匿名使用者即可,還是在web.config中system.web節點下添加一段配置:

<anonymousIdentification enabled="true"/>

  ok,現在再來瀏覽下頁面,點擊button試試?沒有任何反應?這就對了!

  我們再次建立一個頁面,在這個頁面的page_load事件當中添加一句Response.write(Profile.test);

  完事,我們先瀏覽第一個頁面,點擊button,執行了Profile.test=“123123”;這段代碼,然後關閉瀏覽器,再開啟第二個頁面,可以看到,我們在第一個頁面中存入的“123123”這個字串,在第二個頁面顯示出來了。

 

  原理很簡單:當我們開啟了anonymousIdentification功能後,ASP.NET會給每個使用者指派一個AnonymousID,儲存在Cookie中。

  這是Cookie中儲存的內容,.ASPXANONYMOUS這是預設的Cookie名稱,可以在web.config中的anonymousIdentification節中CookieName屬性中設定自己的Cookie名字。

  這是在調試狀態下,得到的AnonymousID

  這是資料庫aspnet_Users表中儲存的內容,注意UserName和IsAnonymous欄位。

  這是資料庫中aspnet_Profile中的內容,可以看到,我們test屬性中的內容為:123123,PropertyNames欄位中test:S:0:6的含義大家應該猜出來了吧!test是屬性名稱,S代表的String類型,0:6代表PropertyValuesString欄位中的從第0位到第6位的內容。

  這樣,當該使用者使用這台電腦再次訪問網站,網站便可以根據這個Cookie中的AnonymousID來識別出使用者的身份,再通過AnonymousID從aspnet_Profile表中,便可以取出使用者上一次儲存的資料。

 

  ok,以上便是匿名狀態下的Profile。當然,如果我們不需要匿名,而要求使用者登入後才能儲存資料的話,那麼就沒上面這麼麻煩了,直接設定allowAnonymous="false"即可,不需要去添加anonymousIdentification 配置。這樣,該屬性只能在使用者登入狀態下訪問,未登入去訪問該屬性就會報錯。

 

  本篇文章簡單的介紹了下Profile在實際項目中的應用,大家可以照著試一下,先有一個感性認識,下篇繼續,會有一個小的項目,來完整的示範一下Profile的應用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.