bftarane
چهارشنبه 01 آذر 1391, 14:58 عصر
سلام.
من از سيستم تشخيص هويت پيشرفته لينک زير براي سايتم استفاده کردم.
http://how2learnasp.net/article.aspx?code=85c9dd50-0935-48c2-9039-949da6b42f8d
الآن سوالاتي دارم.
1.
در سايت من وقتي فرضاً با نام کاربري a لوگين کرده ام و ميام بدون اينکه خارج شده باشم با يه نام کاربري ديگه وارد ميشم، کاربر دوم مي تونه وارد بشه. اين مشکل رو چه طوري حل کنم؟
...................
2.
من دو تا MasterPage دارم يکي براي ادمين و يکي براي بقيه صفحات. کنترل لوگين را به صورت يوزرکنترل ساخته ام و در Masterpage اصلي قرار دارد و ادمين و بقيه کاربران از طريق اين کنترل لوگين وارد ميشوند. حالا من اين کدها رو فقط در مسترپيج اصلي نوشته ام.
string PageName = System.IO.Path.GetFileName(Request.Path).ToLower() ;
SqlDataReader dr = MyDALBase.ExecuteReader(System.Data.CommandType.St oredProcedure, "GetRolesByPage", new SqlParameter[]{
new SqlParameter("@PageName",PageName)
});
if (dr.Read())
{
if (Page.User.Identity.IsAuthenticated)
{
if (!Page.User.IsInRole(dr["PageRole"].ToString()))
{
Response.Redirect("MsgPage.aspx");
}
}
else
{
FormsAuthentication.RedirectToLoginPage();
}
}
آيا اين مسئله مشکلي ايجاد مي کنه؟ آيا بايد اين کدها را در مسترپيج ادمين هم بنويسم؟
...............................
3.
مشکل ديگري که وجود داره اين است که Admin که لوگين کرد به صفحه اي رفت و در آن صفحه دکمه خروج را زد وقتي دکمه back براوزر را کليک کرد نبايد به عنوان کاربر وارد شده شناخته شود که متأسفانه اين اتفاق نمي افتد و پس از زدن دکمه back با پيام خوشآمدگويي به اين کاربر مواجه ميشوم
اميدوارم منظورم را رسانده باشم.
لطفاً راهنمايي بفرماييد.
اين کدهاي رويداد لوگين من است
if (GetMemberAuthenticate(txt_uname.Text, FormsAuthentication.HashPasswordForStoringInConfig File(txt_pass.Text, "MD5")))
{
string role = GetMemberRoleByID(txt_uname.Text);
DateTime expiration;
if (chk_rememberme.Checked)
{
expiration = DateTime.Now.AddMonths(1);
}
else
{
expiration = DateTime.Now.AddMinutes(30);
}
FormsAuthenticationTicket AuthTicket = new FormsAuthenticationTicket(1, txt_uname.Text, DateTime.Now, expiration, false, role);
string encryptedTicket = FormsAuthentication.Encrypt(AuthTicket);
HttpCookie AuthCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
Response.Cookies.Add(AuthCookie);
string[] temp = role.Split(',');
for (int i = 0; i < temp.Length; i++)
{
if (temp[i]=="Admin")
{
Response.Redirect("x.aspx");
}
}
Response.Redirect(FormsAuthentication.GetRedirectU rl(txt_uname.Text, chk_rememberme.Checked));
}
else
{
lbl_login.Visible = true;
}
اين کدهاي دکمه خروج
protected void lnkbtn_signout_Click(object sender, EventArgs e)
{
FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage();
}
و اين هم قسمتي از کدهاي وب کانفيگ من
<authentication mode="Forms">
<forms loginUrl="Default.aspx" defaultUrl="~/"></forms>
</authentication>
ممنون.
من از سيستم تشخيص هويت پيشرفته لينک زير براي سايتم استفاده کردم.
http://how2learnasp.net/article.aspx?code=85c9dd50-0935-48c2-9039-949da6b42f8d
الآن سوالاتي دارم.
1.
در سايت من وقتي فرضاً با نام کاربري a لوگين کرده ام و ميام بدون اينکه خارج شده باشم با يه نام کاربري ديگه وارد ميشم، کاربر دوم مي تونه وارد بشه. اين مشکل رو چه طوري حل کنم؟
...................
2.
من دو تا MasterPage دارم يکي براي ادمين و يکي براي بقيه صفحات. کنترل لوگين را به صورت يوزرکنترل ساخته ام و در Masterpage اصلي قرار دارد و ادمين و بقيه کاربران از طريق اين کنترل لوگين وارد ميشوند. حالا من اين کدها رو فقط در مسترپيج اصلي نوشته ام.
string PageName = System.IO.Path.GetFileName(Request.Path).ToLower() ;
SqlDataReader dr = MyDALBase.ExecuteReader(System.Data.CommandType.St oredProcedure, "GetRolesByPage", new SqlParameter[]{
new SqlParameter("@PageName",PageName)
});
if (dr.Read())
{
if (Page.User.Identity.IsAuthenticated)
{
if (!Page.User.IsInRole(dr["PageRole"].ToString()))
{
Response.Redirect("MsgPage.aspx");
}
}
else
{
FormsAuthentication.RedirectToLoginPage();
}
}
آيا اين مسئله مشکلي ايجاد مي کنه؟ آيا بايد اين کدها را در مسترپيج ادمين هم بنويسم؟
...............................
3.
مشکل ديگري که وجود داره اين است که Admin که لوگين کرد به صفحه اي رفت و در آن صفحه دکمه خروج را زد وقتي دکمه back براوزر را کليک کرد نبايد به عنوان کاربر وارد شده شناخته شود که متأسفانه اين اتفاق نمي افتد و پس از زدن دکمه back با پيام خوشآمدگويي به اين کاربر مواجه ميشوم
اميدوارم منظورم را رسانده باشم.
لطفاً راهنمايي بفرماييد.
اين کدهاي رويداد لوگين من است
if (GetMemberAuthenticate(txt_uname.Text, FormsAuthentication.HashPasswordForStoringInConfig File(txt_pass.Text, "MD5")))
{
string role = GetMemberRoleByID(txt_uname.Text);
DateTime expiration;
if (chk_rememberme.Checked)
{
expiration = DateTime.Now.AddMonths(1);
}
else
{
expiration = DateTime.Now.AddMinutes(30);
}
FormsAuthenticationTicket AuthTicket = new FormsAuthenticationTicket(1, txt_uname.Text, DateTime.Now, expiration, false, role);
string encryptedTicket = FormsAuthentication.Encrypt(AuthTicket);
HttpCookie AuthCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
Response.Cookies.Add(AuthCookie);
string[] temp = role.Split(',');
for (int i = 0; i < temp.Length; i++)
{
if (temp[i]=="Admin")
{
Response.Redirect("x.aspx");
}
}
Response.Redirect(FormsAuthentication.GetRedirectU rl(txt_uname.Text, chk_rememberme.Checked));
}
else
{
lbl_login.Visible = true;
}
اين کدهاي دکمه خروج
protected void lnkbtn_signout_Click(object sender, EventArgs e)
{
FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage();
}
و اين هم قسمتي از کدهاي وب کانفيگ من
<authentication mode="Forms">
<forms loginUrl="Default.aspx" defaultUrl="~/"></forms>
</authentication>
ممنون.