第一次接觸membership,被它的強大的功能,和便捷的使用所吸引。但是再近一步理解它,便不覺得它好了,首先,因為vs中它是預設使用sql server 2005 express的,如果想使用其他資料庫該怎麼辦?其次,它所提供的使用者資訊也很少,如果要新增自定的資訊應該怎樣擴充套件?
asp.net 2.0已經出來這麼久了,我想應該不少人有這樣的疑惑了吧!就用google搜尋看是否有同我「志同道合」的同志,先是找到這麼一段:
最近看了一下asp.net2的使用者管理模型,個人感覺他的確提供了很整合化的功能,對於一般的應用可以很傻瓜式的達到要求。但是在使用中也有以下幾點疑問:
2、如果我要在現有使用者表上擴充套件功能,我還能使用membership類實現嗎?比如,我要記錄使用者的登入次數(目前aspnetdb使用者表似乎沒有這個),或者說每個使用者都有乙個賬戶餘額,並且在建立使用者的時候將為每個使用者給定乙個可能不同的初始餘額,在登入的時候將會根據餘額來判斷使用者能否登入成功。那麼這個時候mebership.createuser(),login控制項等還有用嗎,或者說怎麼最大化的使用原有的方法。同時,membership.deleteuser似乎是物理刪除資料(不是用isdeleted欄位),這個在應用中好像一般不是這樣吧。
關於使用其他資料庫有人給出了這樣的答覆:
第乙個問題:2005下的membershipprovider預設呼叫的是sqlexpress資料庫,這個在c:\windows\microsoft.net\framework\v2.0.50727\config下面的machine.config裡面可以看到,如果你像使用sqlserver2k或者2k5,執行:c:\windows\microsoft.net\framework\v2.0.50727\aspnet_regsql.exe程式,裡面更改預設資料庫,然後在專案的web.config中重寫配置檔案
public static datatable listuser(string userroles)//列出指定組的使用者資訊
return dt;
}public static void deleteuser(string username)/刪除指定使用者
public static void updateuser(string username)/更新指定使用者
2、自定義乙個membershipinfo**,同membership系統標關聯起來。自己編寫sql語句來進行查詢,修改等功能。
列出指定組的使用者
select * from aspnet_membership inner join aspnet_users on
aspnet_membership.userid=aspnet_users.userid left join memberinfo on aspnet_membership.userid=memberinfo.userid
where aspnet_membership.userid=(select userid from aspnet_usersinroles inner join
aspnet_roles on aspnet_usersinroles.roleid=aspnet_roles.roleid where rolename='admin')
刪除、修改等功能比較簡單,這裡就不作敘述。可以採用membership的createuser方法建立,然後再用sql語句寫入memberinfo表。
對於建立使用者,我們可以採取擴充套件createuserwizard控制項,或者自行寫登陸介面。
1、採取擴充套件createuserwizard控制項,我們可以使用它的模版列,此時需要注意的是:使用者名稱,密碼,提示問題,提示問題答案,email,他們的id一定要分別是username,password,question,answer,email否則會出錯,而且此時驗證控制項均不能使用。懷疑是ide的乙個bug。
如下所示,我們定義好的樣式應當是:
<wizardsteps>
<asp:createuserwizardstep runat="server"> 自定義**部分<contenttemplate>
</contenttemplate>
</asp:createuserwizardstep>
</wizardsteps>
**部分:
protected void createuserwizard1_createduser(object sender, eventargs e)
2、採取自己寫ui,個人推薦使用這種方法。靈活性比較大,而且可以使用2005強大的驗證控制項。
頁面部分比較簡單略過不再陳述。下面詳細介紹一下**部分。
此時我們需要使用membership的createuser()方法。語法我們就不再介紹。他會根據建立使用者的結果返回成乙個membershipcreatestatus列舉類,它詳細的包含了所有建立使用者不成功的錯誤資訊。我們只需要根據他的值,就可以返回給介面相應的提示,如:使用者名稱已經存在,電子郵件已經存在等等。
對於自定義使用者資訊部分我們仍然可以採取profile或者自定義membershipinfo表的方法。
列出profile建立使用者的方法。sql語句比較簡單,略過不寫。
protected void button1_click(object sender, eventargs e)
else
}public void geterrormessage(membershipcreatestatus status)
}
個人見解:採取profile的方法,比較方便,由於profile 是強型別,可以通過智慧型感知功能減少**的輸入量。採取自定義資料表的方法,需要輸入大量的sql語句,但是查詢速度比較快,效能比較強,由於roles.getusersinrole()方法無法分頁讀取資料,只能一次性讀出來所有資料,而自寫sql 語句可以很方便的根分頁結合起來。隨著使用者量的增多,故不推薦profile方法。
三、密碼問題。
個人覺得密碼是乙個比較頭疼的問題。我們在實際開發中總是需要admin組有對使用者進行密碼修改的許可權。membership提供的修改密碼方法只能在已經知道密碼提示答案的時候才能修改。而admin組根本不可能知道使用者的密碼提示答案的。這裡有點好笑。難道是中西方文化差異?
列出個人對membership密碼研究的一些心得。
大家都知道machine.config和web.config,如果兩者發生衝突,那麼以web.config優先。
預設狀態下,membership是採用sha1的方法進行加密,然後採取一種機制,與passwordsalt進行再次加密,最後形成資料庫中顯示的密碼。可見隨著md5加密的破解,微軟對密碼的安全也煞費苦心。
有的朋友不喜歡預設的sha1加密形式,我們只需要在web.config中設定以下**來覆蓋machine.config中對密碼的設定就好了:
這兩篇文章一定程度的回答了我的2個疑問,但好像這樣的答覆使membership失去了便捷性!如果使用access資料庫的專案是不是不能使用membership?
關於RUP實用性的討論
偉傑觀點 對於實用性的問題我還是比較中立的,我不打算為rup搖旗吶喊,也不打算痛陳rup的不足,只是希望能夠戴上不同顏色的思考帽,在各個不同角度審視我們的開發過程,審視我們的方法和體系,與所有讀者交換看法,找出最適合的軟體方法,最終能跟大家一起為中華軟體之崛起貢獻自己的乙份力量。其實是否實用關鍵看從...
python實用性 6個實用性強的python庫
在程式設計時,小挫折可能與大難題一樣令人痛苦。沒人希望在費勁心思之後,只是做到彈出訊息視窗或是快速寫入資料庫。因此,程式設計師都會喜歡那些能夠快速處理這些問題,同時長遠來看也很健壯的解決方案。1.pyglet 是什麼 pyglet是乙個純python語言編寫的跨平台框架,用於開發多 和視窗特效應用,...
什麼是實用性測試?
什麼是實用性測試?陳能技 2007 9 4 實用性測試,也叫實用主義測試,強調運用實用的測試方法和技術,快速高效地幫助測試人員完成測試工作,從而保證軟體質量。有鑑於各種各樣的測試理論和測試工具 測試方法都過於理論化,有些甚至已經不適合現在的軟體專案過程。為此提出實用性測試概念,倡導實用的測試技術和方...