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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

自动登录、记住我(保存登陆状态)实现

發布時間:2024/6/21 综合教程 44 生活家
生活随笔 收集整理的這篇文章主要介紹了 自动登录、记住我(保存登陆状态)实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

自動登錄、記住我(保存登陸狀態)實現:
保存在客戶端
不能用session,可以用cookies保存

實現方式:
第一種方法:
可以把SessionId(GUID)放到cookies中,但

這樣為了讓用戶下次訪問我們網站時,知道這

個sessionId對應的是哪一個用戶,我們還要在

數據庫中建張表。
表字段:
主鍵,UserIdSessionId時間

缺點:不能在兩臺機器上同時保存

第二種方法:
把UserId放cookies中密碼(加密)
相對于第一種方法優點:多臺機器可以保存
缺點:不安全,密碼放到了客戶端。

第二種方法實現代碼:

頁面加載讀取Cookie判斷,正確寫入Session,轉向

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Request.Cookies["cUser"] != null && Request.Cookies["cPwd"] != null)
{
string cUser = Request.Cookies["cUser"].Value;
string cPwd = Request.Cookies["cPwd"].Value;

string sqlPwd = "";
BookShop.Model.User oneUser = bll.Exists(cUser);
if (oneUser != null)
{
#region MyRegion
//說明存在cUser
if (cPwd.Length > 2)//防止用戶修改Cookie中的密碼報錯
{
string salt = cPwd.Substring(0, 2);
sqlPwd = oneUser.LoginPwd;

sqlPwd = Encrypt(sqlPwd, salt);
if (cPwd == sqlPwd)
{
//保存Session狀態
Session["user"] = oneUser;
//轉向
#region MyRegion
if (Request.QueryString["returnUrl"] == null)
{
//登陸成功,轉向首頁
Response.Redirect("/member/ShowMessage.aspx?returnUrl=" + Server.UrlEncode("/Default.aspx") + "&msg=" + Server.UrlEncode("自動登陸成功") + "&txt=" + Server.UrlEncode("轉向首頁"));

}
else
{
//登陸成功,轉向上次訪問頁面
string returnUrl = Request.QueryString["returnUrl"];
Response.Redirect(returnUrl);
}
#endregion
}
}
#endregion

}
//如果Cookies出錯...清除cookie
ClearLoginCookie();
}

}

}

//頁面登陸

protected void btnLogin_Click(object sender, ImageClickEventArgs e)
{
if (!Page.IsValid)
{
return;
}
string uid = txtLoginId.Text.Trim();
string pwd = txtLoginPwd.Text.Trim();
BookShop.Model.User oneUser;
UserManager bll = new UserManager();
bool result = bll.Login(uid, pwd, out oneUser);
if (result)
{
//保存session
Session["user"] = oneUser;

//保存Cookie狀態
if (cbAutoLogin.Checked)
{
HttpCookie cUser = new HttpCookie("cUser", uid);
HttpCookie cPwd = new HttpCookie("cPwd", Encrypt(oneUser.LoginPwd));
cUser.Expires = DateTime.Now.AddYears(10);
cPwd.Expires = DateTime.Now.AddYears(10);
Response.Cookies.Add(cUser);
Response.Cookies.Add(cPwd);
}

if (Request.QueryString["returnUrl"] == null)
{
//登陸成功,轉向首頁
Response.Redirect("/Default.aspx");
}
else
{
//登陸成功,轉向上次訪問頁面
string returnUrl = Request.QueryString["returnUrl"];
Response.Redirect("/member/ShowMessage.aspx?returnUrl=" + HttpContext.Current.Server.UrlEncode(returnUrl) + "&msg=" + Server.UrlEncode("登陸成功") + "&txt=" + Server.UrlEncode("轉向上次訪問頁面"));
}

}
else
{
//登陸失敗,提示錯誤信息
Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "alert('用戶名或密碼錯誤!');", true);
}

}

/// <summary>
/// 對密碼進行MD5加密
/// </summary>
/// <param name="pwd"></param>
/// <returns></returns>
protected string Encrypt(string pwd)
{
return Encrypt(pwd, null);
}

/// <summary>
/// MD5加密方法擴展
/// </summary>
/// <param name="pwd"></param>
/// <returns></returns>
protected string Encrypt(string pwd, string salt)
{
//加密規則: salt+md5(salt+md5(pwd+"zfx"))

MD5 md5 = MD5.Create();//MD5加密方法
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(pwd + "zfx");
buffer = md5.ComputeHash(buffer);
string str = "";
for (int i = 0; i < buffer.Length; i++)
{
str += buffer[i].ToString("X2");
}

if (salt == null)
{
Random r = new Random();
salt = ((char)(r.Next(65, (65 + 26)))).ToString() + ((char)(r.Next(65, (65 + 26)))).ToString();
}
str = salt + str;
str = CommenCodes.CommenCodes.Md5(str); //調用其他類庫中 MD5實現方法,具體實現見本方法之前
return (salt + str);
}

/// <summary>
/// (在服務器端)清除客戶端cookie
/// </summary>
private void ClearLoginCookie()
{
//在服務器端清除客戶端cookie
HttpCookie cUser = new HttpCookie("cUser");//新建兩個跟之前同名的cookie,用于覆蓋客戶端的cookie
HttpCookie cPwd = new HttpCookie("cPwd");
cUser.Expires = DateTime.Now.AddYears(-10);//設置過期時間為過期
cPwd.Expires = DateTime.Now.AddYears(-10);
Response.Cookies.Add(cUser);
Response.Cookies.Add(cPwd);

}

自動登錄絕對不安全,有安全隱患
進入網站后,對于關鍵步驟再次要求用戶輸入密碼

總結

以上是生活随笔為你收集整理的自动登录、记住我(保存登陆状态)实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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