天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

asp.net forms身份驗(yàn)證,避免重復(fù)造輪子

問(wèn)題:大家都說(shuō)使用 forms 驗(yàn)證無(wú)法得到當(dāng)前登錄用戶除了用戶名之外的更多信息,經(jīng)過(guò)我的一番小試驗(yàn),在 forms 方式下自帶的 userdata 可以為我們施展天地的地方。下面記錄一下我的操作步驟備忘。
step 1: web.config 配置關(guān)鍵地方:
web.config配置
復(fù)制代碼 代碼如下:
<!--
通過(guò) <authentication> 節(jié)可以配置 ASP.NET 用來(lái)
識(shí)別進(jìn)入用戶的
安全身份驗(yàn)證模式。
-->
<authentication mode="Forms">
<forms loginUrl="login.ASPx" defaultUrl="index.ASPx"
name=".ztinfozero" path="/Manager"
slidingExpiration="true" timeout="10"></forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>

step 2: 構(gòu)造 SiteUser Model
復(fù)制代碼 代碼如下:
TopicUser Model
[Serializable]
public class TopicUser
{
public TopicUser() { }
model#region model
private System.Int32 _autoID;
/**//// <summary>
///
/// </summary>
public System.Int32 autoID
{
get { return _autoID; }
set { _autoID = value; }
}
private System.String _UserName;
/**//// <summary>
/// 用戶名
/// </summary>
public System.String UserName
{
get { return _UserName; }
set { _UserName = value; }
}
private System.String _UserChName;
/**//// <summary>
/// 真實(shí)姓名
/// </summary>
public System.String UserChName
{
get { return _UserChName; }
set { _UserChName = value; }
}
private System.String _UserPass;
/**//// <summary>
///
/// </summary>
public System.String UserPass
{
get { return _UserPass; }
set { _UserPass = value; }
}
private System.String _DepartMent;
/**//// <summary>
///
/// </summary>
public System.String DepartMent
{
get { return _DepartMent; }
set { _DepartMent = value; }
}
private System.String _Duty;
/**//// <summary>
///
/// </summary>
public System.String Duty
{
get { return _Duty; }
set { _Duty = value; }
}
private System.Int32 _UserPermit;
/**//// <summary>
///
/// </summary>
public System.Int32 UserPermit
{
get { return _UserPermit; }
set { _UserPermit = value; }
}
private System.Int32 _Status;
/**//// <summary>
///
/// </summary>
public System.Int32 Status
{
get { return _Status; }
set { _Status = value; }
}
#endregion
}

step 3: 創(chuàng)建用戶登錄代碼:

數(shù)據(jù)庫(kù)-用戶登錄方法
復(fù)制代碼 代碼如下:
public TopicUser UserLogon(string username, string pass) {
string proc = "dbo.infozero_Proc_userLogOn";
Database db = DataFactory.userDB;
DbCommand cmd = db.GetStoredProcCommand(proc);
db.AddInParameter(cmd, "@username", DbType.String, username);
db.AddInParameter(cmd, "@userpass", DbType.String, pass);
db.AddOutParameter(cmd, "@result", DbType.Int32, 4);
DataSet ds = db.ExecuteDataSet(cmd);
TopicUser user = null;
int result = 0;
if (int.TryParse(db.GetParameterValue(cmd, "@result").ToString(), out result) )
user = tableToUser(ds.Tables[0]);
return user;
}
#region table to user
private TopicUser tableToUser(DataTable dt) {
TopicUser model = null;
if (dt.Rows.Count > 0) {
model = new TopicUser();
DataRow dr = dt.Rows[0];
int aid = 0;
int.TryParse(dr["autoID"].ToString(), out aid );
model.autoID = aid;
model.UserName = dr["UserName"].ToString();
model.UserChName = dr["UserChName"].ToString();
model.UserPass = dr["UserPass"].ToString();
model.DepartMent = dr["DepartMent"].ToString();
model.Duty = dr["Duty"].ToString();
if (dr["UserPermit"].ToString() != "")
{
model.UserPermit = int.Parse(dr["UserPermit"].ToString());
}
if (dr["Status"].ToString() != "")
{
model.Status = int.Parse(dr["Status"].ToString());
}
}
return model;
}
#endregion

step 4 : 創(chuàng)建登錄頁(yè):

代碼
復(fù)制代碼 代碼如下:
protected void btnOK_Click(object sender, EventArgs e)
{
string username = tbname.Text.Trim();
string pass = tbpass.Text.Trim();
if (!string.IsNullOrEmpty(username)) {
if (!string.IsNullOrEmpty(pass)) {
DataService.User b = new DataService.User();
DataService.TopicUser user = b.UserLogon(username, pass);
if (user != null) {
//roles , userid | userchname
string userdata = string.Format("{0},{1}|{2}",
user.UserPermit, user.autoID, user.UserChName);
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
, username, DateTime.Now, DateTime.Now.AddHours(2),
true, userdata);
string encticket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(
FormsAuthentication.FormsCookieName, encticket);
Response.Cookies.Add(cookie);
Response.Redirect("Index.ASPx");
}
}
}
}

step 5: 在 global.asax 里添加 Application_AuthenticateRequest 事件以設(shè)置當(dāng)前登錄用戶的信息:
復(fù)制代碼 代碼如下:
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
HttpCookie cookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null) {
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
if (ticket != null) {
string[] roles = ticket.UserData.Split(',');
FormsIdentity id = new FormsIdentity(ticket);
System.Security.Principal.GenericPrincipal principal = new GenericPrincipal(id, roles);
Context.User = principal;
}
}
}

step 6: 如何得到當(dāng)前登錄用戶的信息
復(fù)制代碼 代碼如下:
public static TopicUser CurrentUser {
get {
DataService.TopicUser user = new DataService.TopicUser();
FormsIdentity identity = HttpContext.Current.User.Identity as FormsIdentity;
FormsAuthenticationTicket ticket = identity.Ticket;
string userdata = ticket.UserData; //獲取自定義的 UserData 串
if (!string.IsNullOrEmpty(userdata)) {
if (userdata.IndexOf(',') > 0 && userdata.IndexOf('|') > 0)
{
//roles , userid | userchname
string uinfo = userdata.Split(',')[1];
string[] u = uinfo.Split('|');
int uid = 0;
int.TryParse(u[0], out uid);
user.autoID = uid;
user.UserChName = u[1];
user.UserName = HttpContext.Current.User.Identity.Name;
}
}
return user;
}
}

由此得到當(dāng)前登錄用戶的 ID 為 UserBase.CurrentUser.autoID ; 真實(shí)名字是: UserBase.CurrentUser.UserChName ;
判斷當(dāng)前用戶的角色是否為管理員: HttpContext.Current.User.IsInRole("1") ; // 1 為管理員
退出當(dāng)前登錄的方法:
LogOut.ASPx
復(fù)制代碼 代碼如下:
protected void Page_Load(object sender, EventArgs e)
{
System.Web.Security.FormsAuthentication.SignOut();
Response.Write("<script>window.top.location='login.ASPx';</script>");
Response.End();
}

至此,身份驗(yàn)證完成。我們不用費(fèi)盡心思在四處堆放用戶是否登錄判斷的代碼了。

AspNet技術(shù)asp.net forms身份驗(yàn)證,避免重復(fù)造輪子,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 牛和人交videos欧美 | 色偷偷网站 | 久久久久毛片免费观看 | 夜夜躁婷婷AV蜜桃视频 | 国产在线观看www鲁啊鲁免费 | 一本道mw高清码二区三区 | 日本乱hd高清videos | 在线播放性xxx欧美 在线播放午夜理论片 | 麻豆久久婷婷五月国产 | 榴莲推广APP网站入口下载安装 | 无人区日本电影在线观看高清 | 国产色精品久久人妻无码看片 | 波多野结衣二区 | 囯产精品久久久久免费蜜桃 | 手机伊在人线香蕉2 | 亚洲国产成人一区二区在线 | 黑色丝袜美腿美女被躁翻了 | 亚洲精品偷拍影视在线观看 | 国产欧美一本道无码 | 欧美视频精品一区二区三区 | 亚洲AV久久久噜噜噜噜 | 亲胸吻胸添奶头GIF动态图免费 | 国产色青青视频在线观看 | 日本阿v在线资源无码免费 日本阿v片在线播放免费 | 91嫩草私人成人亚洲影院 | 交换邻居波多野结衣中文字幕 | 久久水蜜桃亚洲AV无码精品偷窥 | 久久久久国产 | 妺妺窝人体色WWW偷窥女厕 | yellow在线观看免费观看大全 | 无人影院在线播放 | 午夜不卡久久精品无码免费 | 陈红下面又紧又小好爽 | 无码任你躁久久久久久老妇双奶 | 黑丝美女被人操 | 国产激情精品久久久久久碰 | 久久精品视频91 | 日日噜噜噜夜夜爽爽狠狠 | 妈妈的朋友5在线观看免费完整版中文 | 一级毛片西西人体44rt高清 | 巨黄的肉辣文np |