業務系統實現記住密碼和自動登入功能

來源:互聯網
上載者:User

標籤:

公司的業務系統本來是受域控的,使用者不需要登入可以直接存取系統。當然,雖然不用人工登入,系統本身會讀取電腦的使用者名稱為登入標識,對系統操作許可權和記錄也是以電腦名。近段時間,由於系統要牽到雲端,也就是不受域控了,那就需要每人手頭上都有帳號和密碼了,這個和一般的業務系統沒什麼區別。但是由於使用者之前的習慣是不用登入的,而且每天開啟關閉的次數較多。OK,一般的系統登入都會有個記住密碼的功能,但是,這還滿足不了使用者的需求,那麼我們給使用者增加多一個自動登入功能,類似QQ那樣,我上次訪問勾選了自動登入功能,然後再次訪問就不用再去登入了。

  先來看看原來讀取域使用者的代碼吧。

 string strname = HttpContext.Current.User.Identity.Name;//擷取到帶網域名稱的使用者        string name = HttpContext.Current.User.Identity.Name.Substring(HttpContext.Current.User.Identity.Name.IndexOf("\\") + 1, HttpContext.Current.User.Identity.Name.Length - HttpContext.Current.User.Identity.Name.IndexOf("\\") - 1);

很多童鞋這樣子擷取到的是空的,是因為web.config沒設定好。必須在設定檔<authentication mode="Windows">把mode的屬性設為Windows,具體位置在<configuration><system.web>裡面。

  好吧,下面就來實現我們的記住密碼和自動登入功能吧。給大家看看登入介面吧。

先跟大家說說具體的功能吧

1、當使用者勾選記住密碼時,下次開啟登入頁面自動填滿使用者名稱和密碼,使用者只需點擊登入按鈕即可以登入,當然,你也可以刪掉自動填滿的密碼自己重新輸入,或者你用另外的使用者密碼登入也行。
2、當使用者勾選自動登入時,記住密碼也會自動被勾選上,因為只有記住了密碼才會有自動登入,這是合理存在的。下次使用者開啟登入頁面時,將會自動驗證跳轉到驗證通過後的頁面,不再需要使用者去點擊登入按鈕。

 先看看前端的簡要代碼,簡單點把需要用到的控制項和js貼出來就好了,其它布局的就不貼出來了。js簡單解釋一下

 
<form runat="server"><input type="hidden" id="hidPass" runat="server" /><input type="text" runat="server" id="txtLoginName" /><asp:TextBox runat="server" ID="txtPassWord" class="textwidthheigh" TextMode="Password"></asp:TextBox><input type="checkbox" runat="server" value="記住密碼" id="chkRemember" onclick="CheckRemember()" /><input type="checkbox" runat="server" value="自動登入" id="chkLogin" onclick="CheckLogin()" /><asp:Button runat="server"  id="btnLogin"  onclick="btnLogin_Click"  /><input type="button" id="btnClear" onclick="Clear()"  /></form>    <script type="text/javascript" language="javascript">//頁面載入使用者名稱輸入框獲得焦點
document.getElementById("txtLoginName").focus(); function Clear() {//使用者點擊取消,清空使用者名稱和使用者密碼
document.getElementById("txtLoginName").value = ""; document.getElementById("txtPassWord").value = ""; } function CheckLogin() {  //使用者勾選自動登入時,把記住密碼也勾選上
var remember = document.getElementById("chkRemember"); remember.checked = true; } function CheckRemember() { var remenber = document.getElementById("chkRemember"); var login = document.getElementById("chkLogin"); if (remenber.checked == false) { login.checked = false;        //使用者去掉記住密碼時,也把自動登入去掉
} } </script>
 

 

 
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {
         //擷取用戶端的Cookies,分別兩個cookies,一個登陸名,一個密碼
HttpCookie LoginNameCookie = Request.Cookies["Bic_LoginName"]; HttpCookie LoginPassCookie = Request.Cookies["Bic_Pass"]; if (LoginNameCookie != null) {            //登入名稱的cookies不為空白,填充登陸名
txtLoginName.Value = LoginNameCookie.Value; } if (LoginPassCookie != null) {            //密碼cookies不為空白,給密碼框和隱藏密碼框填充,當然我們的密碼是加密過才存到cookies去的,至於以藏文字框的作用後面就會看到
this.txtPassWord.Attributes.Add("value",LoginPassCookie.Value+""); hidPass.Value = LoginPassCookie.Value + "";//賦值給隱藏控制項 chkRemember.Checked = true; }          //擷取是否有勾選自動登入的cookies
HttpCookie Login = Request.Cookies["Bic_LoginAuto"];          //當使用者在系統點擊退出時
if (Request["opFlag"] == "Exit") { this.txtPassWord.Attributes.Add("value", "");//把密碼去掉 chkRemember.Checked = false;//記住密碼去掉 HttpCookie loginNameCookie = Request.Cookies["Bic_LoginName"];//擷取登入名稱cookies
HttpCookie loginPassCookie = Request.Cookies["Bic_Pass"];//擷取密碼cookies
if (loginNameCookie != null) {              //把cookies時間設為-2相當於刪掉了cookies
loginNameCookie.Expires = DateTime.Now.AddDays(-2); Response.Cookies.Set(loginNameCookie); } if (loginPassCookie != null) {              //把密碼的cookies也刪掉
loginPassCookie.Expires = DateTime.Now.AddDays(-2); Response.Cookies.Set(loginPassCookie); }            //自動登入cookies也一樣
HttpCookie login = Request.Cookies["Bic_LoginAuto"]; if (login != null) { login.Expires = DateTime.Now.AddDays(-2); Response.Cookies.Set(login); } } else//使用者開啟登入介面時
{            //自動登入cookies不為空白,使用者名稱不為空白,隱藏框密碼不為空白
if (Login != null && txtLoginName.Value != "" && hidPass.Value != "") { SysUser user = new SysUser(); user.Login_Name = txtLoginName.Value; user.Login_Pass = hidPass.Value; int i = SysUserBLL.Login(user);//驗證登入
if (i > 0) {                 //成功登入跳轉到default.aspx頁面
Page.Session["Login_Name"] = user.Login_Name; HttpContext.Current.Session["Display_Name"] = SysUserBLL.getDisplayNameByname(user.Login_Name); Response.Write("<script>window.location=‘‘Default.aspx‘‘;</script>"); Response.End(); } } } }
}
//點擊登入按鈕事件
protected void btnLogin_Click(object sender, EventArgs e)
        {
       //判斷是否為空白
            if (txtLoginName.Value.Trim() != "" && txtPassWord.Text.Trim() != "")
            {
                SysUser user = new SysUser();
                user.Login_Name = txtLoginName.Value.Trim();
                user.Login_Pass = CommonHelper.MD5encipher(txtPassWord.Text.Trim());//MD5加密
                HttpCookie LoginNameCookie = Request.Cookies["Bic_LoginName"];
                HttpCookie LoginPassCookie = Request.Cookies["Bic_Pass"];
                if (LoginNameCookie != null)//如果是記住密碼情況
                {
                    if (txtLoginName.Value.Trim() == LoginNameCookie.Value.Trim())//讀取到cookies儲存的使用者名稱和文字框使用者名稱相同,預防使用者又改動
                    {
                        if (LoginPassCookie != null)
                        {
                            if (txtPassWord.Text.Trim() == LoginPassCookie.Value.Trim())//cookies讀取到的密碼和文字框密碼相同
                            {
                                user.Login_Pass = txtPassWord.Text.Trim();
                            }
                           
                        }
                    }
                }
                int i = SysUserBLL.Login(user);//驗證登入
                if (i > 0)
                {
                    if (chkRemember.Checked == true)//記住密碼
                    {
                        HttpCookie loginNameCookie = new HttpCookie("Bic_LoginName", user.Login_Name);
                        HttpCookie loginPassCookie = new HttpCookie("Bic_Pass", user.Login_Pass);
                        loginPassCookie.Expires = DateTime.Now.AddDays(1);
                        loginNameCookie.Expires = DateTime.Now.AddDays(1);
                        Response.Cookies.Add(loginNameCookie);
                        Response.Cookies.Add(loginPassCookie);
                        if (chkLogin.Checked == true)//自動登入
                        {
                            HttpCookie Login = new HttpCookie("Bic_LoginAuto", "true");
                            Login.Expires = DateTime.Now.AddDays(1);
                            Response.Cookies.Add(Login);
                        }
                        else
                        {
                            HttpCookie Login = Request.Cookies["Bic_LoginAuto"];
                            if (Login != null)
                            {
                                Login.Expires = DateTime.Now.AddDays(-2);
                                Response.Cookies.Set(Login);
                            }
                        }
                    }
                    else//沒選記住密碼
                    {
                        HttpCookie loginNameCookie = Request.Cookies["Bic_LoginName"];
                        HttpCookie loginPassCookie = Request.Cookies["Bic_Pass"];
                        if (loginNameCookie != null)
                        {
                            loginNameCookie.Expires = DateTime.Now.AddDays(-2);
                            Response.Cookies.Set(loginNameCookie);
                        }
                        if (loginPassCookie != null)
                        {
                            loginPassCookie.Expires = DateTime.Now.AddDays(-2);
                            Response.Cookies.Set(loginPassCookie);
                        }
                    }
                    Page.Session["Login_Name"] = user.Login_Name;
                    HttpContext.Current.Session["Display_Name"] = SysUserBLL.getDisplayNameByname(user.Login_Name);
                    Response.Write("<script>window.location=‘‘Default.aspx‘‘;</script>");
                }
                else
                {
                    Response.Write("<script>alert(‘‘使用者名稱或密碼錯誤!‘‘);window.location=‘‘Login.aspx‘‘;</script>");
                }
            }
            else
            {
                Response.Write("<script>alert(‘‘請輸入帳號和密碼!‘‘);window.location=‘‘Login.aspx‘‘;</script>");
            }
        }
 


以上的注釋只是我個人的一些思路和理解,如有不正確之處,還望大牛指導指導啊。如覺得文章對你有協助,請多多支援,你們的支援將會是我寫部落格的動力。

 

轉之----http://www.16aspx.com/Article/3646

(轉)業務系統實現記住密碼和自動登入功能

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.