热线:13628442993 | 联系方式
恩,这就是通过 Cookies 判断用户登录,接着往下看
public static void CheckLogin()
{
CheckCookies();
if (Sessions.UserID == 0)
{
Informations.Deal(InformationType.Simple, LanguageKey.NotLogined, Requests.RawUrl);
}
}
很明显,这是判断登录,检查Cookies,通过后,还有 Session.userid 关键的一步判断
跟踪 Session.userid 得到 HttpContext.Current.Session["Dxbbs_User_ID"]
恩,很明显,只需要再给 HttpContext.Current.Session["Dxbbs_User_ID"] 赋个值就好了,即用户的 ID
到此很明白了,需要给 Cookies["DXBBS"]["UserName"] ,Cookies["DXBBS"]["UserPass"],Cookies["DXBBS"]["Key"],Cookies["DXBBS"]["IsHide"],Session["Dxbbs_User_ID"],Session["Dxbbs_User_Name"] 分别赋值
有人问了,为什么多了一个Session["Dxbbs_User_Name"] ?
因为不给它赋值,页面不会显示用户名称,呵呵
另外需要注意的是:论坛作者对Cookies进行了加密,加密方法有以下几个方法构成:
DXBBS.Components.Filter.Encode() ---> 对字符串进行加密
DXBBS.Components.Filter.Decode() ---->对字符串进行解密
好,到这里,我们知道需要用 Encode加密 【Cookies.UserName 和UserPass 的MD5 16位加密】,isHide为固定值“false”意思是不隐身登录,至于Cookies.key这个,直接用DXBBS.Components.Clients.CookiesKey 给它赋值
最后Session["Dxbbs_User_ID"],Session["Dxbbs_User_Name"] 直接读取数据库就可以了
给出最后的代码:
//用户名
string UserName=txtAccount.Text.Trim();
//密码
string UserPass=txtPWD.Text.Trim();
//加密用户
HttpContext.Current.Response.Cookies["DXBBS"]["UserName"] = DXBBS.Components.Filter.Encode(UserName);
// 首先对密码进行MD5 的16为加密
UserPass = new General.Encryption().MD5(UserPass).Substring(8, 16);
//然后再加密一次密码
HttpContext.Current.Response.Cookies["DXBBS"]["UserPass"] = DXBBS.Components.Filter.Encode(UserPass);
//获取和加密key
string Ckey = DXBBS.Components.Clients.CookiesKey;
HttpContext.Current.Response.Cookies["DXBBS"]["Key"] = DXBBS.Components.Filter.Encode(Ckey);
//直接赋值IsHide
HttpContext.Current.Response.Cookies["DXBBS"]["IsHide"] = "false";
//连接数据库读取数据,为Dxbbs_User_ID 和 Dxbbs_User_Name 赋值
OleDbConnection odbcon = new OleDbConnection();
odbcon.ConnectionString = @"Provider=Microsoft.Jet.OleDb.4.0; Data Source=D:\bbs\data\Dxbbs8.aspx;";
odbcon.Open();
DataSet DSS = new DataSet();
string sqlstrr = "select * from DX_Forum_User where [username]='" + UserName + "'";
OleDbDataAdapter DAA = new OleDbDataAdapter(sqlstrr, odbcon);
DAA.Fill(DSS);
int suerid = 0;
int.TryParse(DSS.Tables[0].Rows[0]["ID"].ToString(), out suerid);
if (suerid > 0)
{
Session["Dxbbs_User_ID"] = suerid;
Session["Dxbbs_User_Name"] = UserName;
}
odbcon.Close();
odbcon.Dispose();