ASP.NET用戶個性化設置Profile——配置1

轉載出自:http://www.cnblogs.com/xlb2000/archive/2010/08/06/1791903.html

  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節點之下:服務器

複製代碼
< 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節點:app

  在這個節點下,add標籤的做用就是添加一個「屬性」,name屬性就是「屬性」的名字,type就是「屬性」的類型,這個類型能夠是int、 double等簡單數據類型,也能夠是購物車類等用戶自定義數據類型,不過須要注意的是,若是爲「類」類型,則該類必須能夠序列化,就是在類的上面添加 [Serializable]特性。allowAnonymous這個屬性指定用戶在匿名狀態下,是否能夠設置該屬性。ide

 

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

Profile.test  =   " 123123 " ;

  這個Profile.test就是咱們在前面properties節點下添加的「屬性」,類型爲string類型。網站

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

  配置文件屬性「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的應用。

相關文章
相關標籤/搜索