日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何在Membership中实现修改密码的功能

發布時間:2025/3/21 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在Membership中实现修改密码的功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2008-02-14 16:10

Membership中要修改密碼,真是很麻煩,還要提供原密碼或者密碼保護的問題,不知道老外是如何想的,也許是微軟太注重安全了吧,不過這就對我們造成了麻煩,客戶的密碼忘了,讓我們在后臺給修改下,我們還要知道客戶的原密碼或者密碼保護的問題才能修改,這個現實生活中不太好辦。
沒辦法,自己手動解決啦:
辦法1:用Membership里的ResetPassword ()方法。
????? 思想:
??????? 這個函數可以將用戶密碼重置為一個自動生成的新密碼,我們可以通過這個方法來獲取用戶的新密碼,然后接合ChangePassword()方法就可以修改用戶的密碼了。
??????? 實現:
?????? 修改密碼:
MembershipUser mymem = Membership.GetUser(uname);//uname為要修改用戶的帳號
string p = mymem.ResetPassword();//將用戶密碼重置為一個自動生成的新密碼
mymem.ChangePassword(p, "www.cn-web.com");//修改用戶密碼為http://www.cn-web.com/

注意:
因為我們用了ResetPassword()方法,這個方法重載兩次,如果用的是沒有參數的重載,就需要修改web.config文件內關于對membership的配置。
將enablePasswordReset屬于置為true,requiresQuestionAndAnswer屬性置為false,如果置為true,則ResetPassword()需要用另一種重載方式,即需要輸入用戶的密碼答案才行,(系統管理員不可能去破解用戶的密碼答案去吧,這個可是加密的),所以requiresQuestionAndAnswer屬性必需置為false,這就意味著系統中不能用通過密碼提示問題和答案來找回密碼的功能了
暈之,上述此種方法有限制,只適合于系統中不用“通過用戶的密碼提示問題和答案找回密碼”的功能的情況下才適合,下面再說一個通用點的辦法來解決Membership如何修改密碼的問題。

辦法2:用自定義的密碼去替換用戶的密碼然后再用ChangePassword修改。
思想:
ChangePassword函數需要提供舊密碼才能修改,如果我們知道用戶的舊密碼就可以了,辦法1中可以將用戶的密碼重置,然后得到用戶密碼,這樣就可以修改了,但是重置用戶的密碼有使用限制。怎么樣我們才能得到用戶的舊密碼呢(不可能去暴力破解),我們可以這樣,在用戶修改密碼之前,將用戶的密碼修改為一個已知的密碼,然后通過這個已知的密碼再用ChangePassword函數去修改。
可能聽起來有點暈,看實現:
實現:
?????? 修改密碼:
MembershipUser mymem = Membership.GetUser(uname);//uname為要修改用戶的帳號
UpdatePwd(uname);;//將用戶密碼重置為一個我們已經的一個密碼,我這里為laohan
mymem.ChangePassword("laohan", "www.cn-web.com");//用戶舊密碼為laohan,這時就可以修改用戶密碼為http://www.cn-web.com/

UpdatePwd方法的實現
?? /// <summary>
?????? /// 更新密碼
?????? /// </summary>
?????? public void UpdatePwd(string uname)
?????? {
?????????? int rowsAffected;
?????????? SqlParameter[] parameters = {
???? new SqlParameter("@ApplicationName", SqlDbType.NVarChar,256),
???? new SqlParameter("@UserName", SqlDbType.NVarChar,256),
???? new SqlParameter("@NewPassword", SqlDbType.NVarChar,128),
???? new SqlParameter("@PasswordSalt", SqlDbType.NVarChar,128),
???? new SqlParameter("@CurrentTimeUtc", SqlDbType.DateTime),
???? new SqlParameter("@PasswordFormat", SqlDbType.Int)};
?????????? parameters[0].Value = "cn_web.com";//您的應用程序名字,如何查看這個名字請參考下附1
?????????? parameters[1].Value = uname;//要修改用戶的帳號
?????????? parameters[2].Value = "081i356xYjAmZI+mqvCoKOix9g4=";//這里是laohan的加密碼密碼,參考附2
?????????? parameters[3].Value = "3I6t4j5h/vxnhNgYIe7oiw==";//每個密碼對應的PasswordSalt對不同,可以查參考附2?????????? parameters[4].Value = DateTime.Now;
?????????? parameters[5].Value = 1;
DbHelperSQL.RunProcedure("aspnet_Membership_SetPassword", parameters, out rowsAffected);//注意,RunProcedure是我自己定義的執行存儲過程的方法,您在這里要替換為您自己的方法,aspnet_Membership_SetPassword是啟用Membership后自動在數據庫中生成的修改密碼的存儲過程.
?????? }

附1獲取當前系統的應用程序名字:
打開sqlserver中表aspnet_Applications,如圖就可以看到您當前系統的ApplicationName了,可以自定義:

附2獲取公共密碼的字串:
我這里公共密碼為laohan,我就先注冊一個帳戶,密碼為laohan,然后打開sqlserver中表aspnet_Users查看該帳戶的userid

?

得到用戶的userid后,再打開sqlserver中表aspnet_Membership,查看對應該密碼的Password字段值和PasswordSalt字段值

2.Forget Password

????? ?MembershipUser user = Membership.GetUser(userName);
??????? bool value = false;
??????? try
??????? {
??????????? value = user.ChangePassword(user.ResetPassword(Server.HtmlEncode(this.txtAnswer.Text)), this.txtNewPwd.Text);
??????? }
??????? catch(Exception ex)
??????? {
??????????? this.lblErrorInfo.Text = ex.Message ;

??????? }?? 這里注意web.config中的,requiresQuestionAndAnswer屬性置為true,否則答案正確錯誤就沒有關系都可以改的。

? 將enablePasswordReset屬于置為true,requiresQuestionAndAnswer屬性置為false,如果置為true,則ResetPassword()需要用另一種重載方式,即需要輸入用戶的密碼答案才行,(系統管理員不可能去破解用戶的密碼答案去吧,這個可是加密的),所以requiresQuestionAndAnswer屬性必需置為false,這就意味著系統中不能用通過密碼提示問題和答案來找回密碼的功能了

轉載于:https://www.cnblogs.com/tinachang021/archive/2008/07/17/1245281.html

總結

以上是生活随笔為你收集整理的如何在Membership中实现修改密码的功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。