亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

使用Membership或其他的Providers的ASP.NET2.0

系統 2041 0

現象2.在vs2005環境下運行程序,A用戶登錄成功,換在IIS下瀏覽,A用戶登錄失敗。

原因在于web.config中自定義的身份驗證提供者中缺少了applicationname的設置

原文: http://lovewangshu.cnblogs.com/archive/2006/04/24/383513.html

在配置使用Membership或其他的Providers的ASP.NET2.0時一定要設置applicationName屬性
原文: Always set the "applicationName" property when configuring ASP.NET 2.0 Membership and other Providers
作者:Scott Guthrie
翻譯:范維肖
注釋:對于個別名詞保留英文描述或翻譯參考。

場景
在本地開發一個asp.net2.0的應用程序時使用了Membership、Roles或Profile特性。你創建了一些新用戶,一切都沒有問題。

然后把這個程序copy到遠程服務器(remote server)上(或者只是移動到你本地服務器上的其他目錄)然后運行。由于某種原因,雖然我們能夠連接到membership數據庫,但是當登陸的時候就會出現錯誤了,它并不拋出連接錯誤(connection error),而是提示你像類似的錯誤:“嘗試登陸失敗,請重試”(Login attempt unsuccessful, please try again)

原因
這種經常出現的錯誤的原因是因為membership(或者是roles、profile) provider已經被加入到了程序的web.config里了。但是applicationName屬性(attribute)并沒有被指定(假設下面的代碼的粗體部分布存在地話)

< membership >

< providers >

< clear />

< add name ="AspNetSqlMembershipProvider"

type ="System.Web.Security.SqlMembershipProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"

connectionStringName ="LocalSqlServer"

enablePasswordRetrieval ="false"

enablePasswordReset ="true"

requiresQuestionAndAnswer ="true"

requiresUniqueEmail ="false"

passwordFormat ="Hashed"

maxInvalidPasswordAttempts ="5"

minRequiredPasswordLength ="7"

minRequiredNonalphanumericCharacters ="1"

passwordAttemptWindow ="10"

passwordStrengthRegularExpression =""

applicationName ="/"

/>

</ providers >

</ membership >

如果applicationName屬性沒有被配置的話,當往程序的數據庫里添加數據的時候,asp.net會使用程序在web服務器里的虛擬目錄路徑(vroot Path)自動的計算applicationName的值。我們打開aspnetdb數據庫,看aspnet_Applications表,就能了解這一行為:


這個表里為每個applicationName存儲了一個具有唯一值(unique)的ApplicationID。因為在我們的程序里注冊一個用戶的時候并沒有指定一個applicationName屬性,所以它自動的被設置(計算)為/website8(早期建立項目時的名字

如果applicationName屬性沒有被配置的話,當往程序的數據庫里添加數據的時候,asp.net會使用程序在web服務器里的虛擬目錄路徑(vroot Path)自動的計算applicationName的值。我們打開aspnetdb數據庫,看aspnet_Applications表,就能了解這一行為:


這個表里為每個applicationName存儲了一個具有唯一值(unique)的ApplicationID。因為在我們的程序里注冊一個用戶的時候并沒有指定一個applicationName屬性,所以它自動的被設置(計算)為/website8(早期建立項目時的名字)

然后,使用membership API創建的用戶會與ApplicationID相關聯,這樣可以找到applicationName(and in turn the applicationName)。【這樣做的目的可以讓我們的多個應用程序和站點使用同一個數據庫】。打開aspnet_Users表就可以可以看到這些。


如果把這個程序配置成運行在/website8虛擬目錄下那么一切都沒有問題。但是如果它被copy到其他的地方或服務器上并且更換了虛擬路徑(比如說“/app1”或更通常被設置的“/”)后,當Membership APIs被使用時他們就“看”不到數據庫里已有的用戶了——因為他們將會使用一個不同的applicationName去數據庫里尋找用戶,相應地過濾application_Users表中的用戶。這就是為什么會出現上面錯誤的原因。

如何解決這個問題
最簡單的辦法是打開ASPNETDB數據庫中的aspnet_Users和aspnet_Application表,去“回想”(figure out,因為那時候我們的虛擬目錄叫什么名字我們恐怕已經忘了)創建用戶和其他數據的時候的程序名稱(去aspnet_Application表中查找)

然后打開你的web.config文件,添加一個applicationName屬性到provider聲明的地方并且給他賦值,例如,下面的代碼我們把它設置為在aspnet_Application表存在的/website8:

< membership >

< providers >

< clear />

< add name ="AspNetSqlMembershipProvider"

type ="System.Web.Security.SqlMembershipProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"

connectionStringName ="LocalSqlServer"

enablePasswordRetrieval ="false"

enablePasswordReset ="true"

requiresQuestionAndAnswer ="true"

requiresUniqueEmail ="false"

passwordFormat ="Hashed"

maxInvalidPasswordAttempts ="5"

minRequiredPasswordLength ="7"

minRequiredNonalphanumericCharacters ="1"

passwordAttemptWindow ="10"

passwordStrengthRegularExpression =""

applicationName ="/website8"

/>

</ providers >

</ membership >

這樣程序就能正常的工作,無論我們部署這個程序到那個虛擬目錄。

當然,我們還要保證Roles、Profile、WebPartPersonalization或其他的我們配置的providers也要被配置了。

這樣我們的程序可以正常工作了。

如果在一開始就避免它:
避免這個問題的最好的辦法是始終設置applicationName的值。一個比較好的默認值是使用“/”。

使用Membership或其他的Providers的ASP.NET2.0時一定要設置application


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品u任我爽爆在线播放 | 日本不卡免免费观看 | 夜夜天天操 | 国产精品伦理久久久久 | 久久99热久久精品动漫 | 日韩狠狠操 | 天天操天天插天天干 | 精品91自产拍在线观看99re | 澳门久久精品 | 久国产视频 | 青青青国产免费手机视频在线观看 | 国产v欧美v日韩在线观看 | 久久久久久久久久免费视频 | 欧产日产国产精品专区 | www色综合| 久久天天躁狠狠躁夜夜爽蜜月 | 伊人婷婷色 | 国产真实伦视频在线视频 | 免费观看欧美精品成人毛片能看的 | 九九99热久久国产 | 四虎影视大全 | 婷婷涩五月| 成人免费视频日本 | 波多野结衣一区二区三区高清在线 | 福利精品 | 亚洲日本va中文字幕在线不卡 | 99热视热频这里只有精品 | 日韩欧美视频在线一区二区 | 久久青草免费91线频观看站街 | 久久99综合| 深夜福利视频网站 | 成人毛片18女人毛片免费96 | 欧美性精品hd在线观看 | 国产亚洲欧美久久久久 | 久在线精品视频 | 在线免费黄色网址 | 精品久久久日韩精品成人 | 香蕉tv亚洲专区在线观看 | 亚洲成人综合视频 | 亚洲第一区二区快射影院 | 成年女人视频在线观看免费 |