Forms驗證中的roles

2021-04-01 17:28:35 字數 3560 閱讀 1090

create table users

(username nvarchar(64) constraint users_pk primary key,

password nvarchar(128),

roles nvarchar(64)

) create index credentials on users

(username,

password

) 我們再在users表中新增兩個使用者:pwqzc  123456  administrator,user

pwq    123456  user

第乙個為名字,第二個為密碼,第三個為使用者所具有的角色,多個角色用,逗號分開

2,建立乙個登陸頁login.aspx

裡面放兩個textbox和乙個按鈕,在按鈕的單擊事件裡寫**:

private void btnlogin_click(object sender, system.eventargs e)

else

//關閉資料庫連線和reader

reader.close();

conn.close();

}5,測試,在應用程式下新建兩個目錄admins和users,分別在他們的目錄下放個default.aspx,上面隨便寫些什麼東西,把其中的乙個default.aspx設定問起始頁(在vs2003環境下),如果你輸入名字pwq和密碼是不能夠進入admins目錄下的,因為這個使用者不屬於administrator角色!

我們來看下forms身份驗證基本原理:

一 身份驗證

要採用forms身份驗證,先要在應用程式根目錄中的web.config中做相應的設

置:其中表示本應用程式採用forms驗證方

式。標籤中的name表示指定要用於身份驗證的cookie。預設是.aspxauth,其實你可以用任何名字,這也就是你在本地硬碟上看到的cookie裡面的前面的幾個字.

forms的驗證過程如下:1,生成身份驗證票,2,加密身份驗證票.3,寫回客戶端,4,瀏覽器重新定向.其實這一系列的動作如果我們不用roles的話都是通過formsauthentication.redirectfromloginpage方法來完成了這一系列的工作任務.但是既然我們要使用roles授權,我們就不能夠使用這個方法,而要分開來,一步步完成.

首先是建立身份驗證票,首先我們看看formsauthenticationticket類的乙個建構函式:

public formsauthenticationticket(

int version, //設為1

string name, //使用者標示

datetime issuedate, //cookie 的發出時間, 設定為 datetime.now

datetime expiration, //過期時間

bool ispersistent, //是否永續性(根據需要設定,若是設定為永續性,在發出

cookie時,cookie的expires設定一定要設定)

string userdata, //這裡用上面準備好的用逗號分割的role字串

string cookiepath // 設為」/」,這要同發出cookie的路徑一致,因為重新整理cookie

要用這個路徑

);最後個引數可以省略

formsauthenticationticket ticket = new formsauthenticationticket

(1,」kent」,datetime.now, datetime.now.addminutes(30), false,userroles)

我們來看下forms身份驗證基本原理:

一 身份驗證

要採用forms身份驗證,先要在應用程式根目錄中的web.config中做相應的設

置:其中表示本應用程式採用forms驗證方

式。標籤中的name表示指定要用於身份驗證的cookie。預設是.aspxauth,其實你可以用任何名字,這也就是你在本地硬碟上看到的cookie裡面的前面的幾個字.

forms的驗證過程如下:1,生成身份驗證票,2,加密身份驗證票.3,寫回客戶端,4,瀏覽器重新定向.其實這一系列的動作如果我們不用roles的話都是通過formsauthentication.redirectfromloginpage方法來完成了這一系列的工作任務.但是既然我們要使用roles授權,我們就不能夠使用這個方法,而要分開來,一步步完成.

首先是建立身份驗證票,首先我們看看formsauthenticationticket類的乙個建構函式:

public formsauthenticationticket(

int version, //設為1

string name, //使用者標示

datetime issuedate, //cookie 的發出時間, 設定為 datetime.now

datetime expiration, //過期時間

bool ispersistent, //是否永續性(根據需要設定,若是設定為永續性,在發出

cookie時,cookie的expires設定一定要設定)

string userdata, //這裡用上面準備好的用逗號分割的role字串

string cookiepath // 設為」/」,這要同發出cookie的路徑一致,因為重新整理cookie

要用這個路徑

);最後個引數可以省略

formsauthenticationticket ticket = new formsauthenticationticket

(1,」kent」,datetime.now, datetime.now.addminutes(30), false,userroles)

然後加密:

string hashticket = formsauthentication.encrypt(ticket);

//設定驗證票cookie,第乙個引數為cookie的名字,第二個引數為cookie的值也就是加密後的票

//設定cookie的有效期是乙個禮拜

cookie.expires = datetime.now.adddays(7);

//把cookie加進response物件發生到客戶端

response.cookies.add(cookie);

//得到請求的url

string requesturl = formsauthentication.getredirecturl(formsauthentication.formscookiename,false);

//不要使用formsauthentication.redirectfromloginpage方法,因為這個方法會重寫cookie

//重新定向到請求的url

response.redirect(requesturl);

以後的各個頁面中通過httpcontext.current.user.identity.name判斷使用者標識,

httpcontext.current.user.isinrole("admin")判斷使用者是否屬於某一角色(或某一組)

徹底解決Forms驗證角色 roles 問題

這個問題是我在做專案的時候遇到的,因為以前都是用seesion來處理類似的問題,但是有朋友說用forms可以減少很多 由於技術有限,研究了很久,工夫不負有心人,在csdn多位大大的幫助下,特別是 only endure 大人的細心 耐心的回答才得以有今天的文章,真是感動啊 閒話就說到此為止,我們知道...

Forms 身份驗證

配置應用程式使用 forms 身份驗證 如果應用程式的根目錄中有 web.config 檔案,請開啟該檔案。複製 在system.web元素中,建立乙個authentication元素,並將它的mode屬性設定為 forms,如下面的示例所示 複製 在authentication元素中,建立乙個fo...

Forms身份驗證

在進行forms身份驗證時,如果採用如下的方法配置web.config的話,則會出現所有的頁面都要進行驗證,這是使用者所不能容忍的,具體 如下 這裡我還要說明一點,很多初學者都會把上面的 寫為 結果會出現不能識別forms節點。如果要實現某個目錄下的forms驗證哪個怎麼辦呢?其實 很簡單,在新增完...