ASP.NET 2.0除了提供了Membership身份驗證機制以外,還提供了一種用戶個性化設置的機制,稱爲Profile。Profile能夠和 Membership結合起來,存儲用戶自定義數據。在Profile中能夠存儲各類類型的數據,包括最基本的int、double類型,也能夠是複雜的 用戶自定義類型,好比購物車、用戶信息等。html
Profile和Session相似,都是用來存儲用戶自定義數據,可是兩者也有本質的區別:web
1.Session只可以短暫的保留用戶數據(默認爲20分鐘),可是Profile能夠持久的保存,由於兩者的存儲介質不一樣,Session 默認是存放在內存當中的,而Profile是存放在數據庫中。雖說Session能夠經過配置使之保存在狀態服務器或者數據庫當中,但仍是有很大的區 別。數據庫
2.Profile是強類型的,而Session僅僅是一個項集合而已。而且VS對Profile提供了智能感知的支持,使用方便。瀏覽器
下面來看看如何使用Profile,首先第一步和Membership同樣,也是添加數據庫支持,仍是和Membership同樣,若是以前按照前面說的添加過了,在這裏直接開始第二步,就是配置。若沒有,則參考前面的文章添加數據庫支持。將下面代碼複製入web.config的system.web節點之下:服務器
這個配置大多數的屬性和Membership中的含義是同樣的,咱們只是說明一下特有的屬性。在這個配置當中有Providers和 Properties節點,其中Providers節點以前在配置Membership中瞭解過了,如今介紹一下properties節點:app
在這個節點下,add標籤的做用就是添加一個「屬性」,name屬性就是「屬性」的名字,type就是「屬性」的類型,這個類型能夠是int、 double等簡單數據類型,也能夠是購物車類等用戶自定義數據類型,不過須要注意的是,若是爲「類」類型,則該類必須能夠序列化,就是在類的上面添加 [Serializable]特性。allowAnonymous這個屬性指定用戶在匿名狀態下,是否能夠設置該屬性。ide
好了,配置完畢,咱們就能夠在頁面上使用Profile了,創建一個頁面,在頁面上添加一個button雙擊在button的click事件當中寫下以下代碼:post
這個Profile.test就是咱們在前面properties節點下添加的「屬性」,類型爲string類型。網站
瀏覽這個頁面,點擊button,看下效果,哈!出錯了!錯誤提示以下:url
配置文件屬性「test」容許匿名用戶存儲數據。這要求啓用 AnonymousIdentification 功能。
這是由於ASP.NET默認狀況下不容許匿名用戶,很簡單,咱們簡單的設置一下,容許使用匿名用戶便可,仍是在web.config中system.web節點下添加一段配置:
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的應用。