• ¡Welcome to Square Theme!
  • This news are in header template.
  • Please ignore this message.
مهمان عزیز خوش‌آمدید. ورود عضــویت


امتیاز موضوع:
  • 14 رای - 2.86 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
Title: مشکلاتي با تشخيص هويت
حالت موضوعی
#1
سلام.

مسئله اينه فرضاً يه کاربر با اسم کاربري a وارد ميشه بدون اينکه خروج رو بزنه يه نام کاربري ديگه رو در لوگين وارد ميکنه و مي تونه وارد بشه به من گفتن نبايد اين اتفاق بيفته.
در واقع من مي خوام اگه کاربر هنوز خارج نشده بود و خواست با يه نام کاربري ديگه لوگين کنه بهش پيغام بده که ابتدا خارج شويد و سپس با نام کاربري جديد لوگين کنيد.

ممنون ميشم راهنمايي کنيد چطور ميشه اين مشکل رو حل کرد؟
يه مسئله ديگه اينه که وقتي کاربر خروج رو زد و دکمه back براوزر رو مي زنه نمي دونم چرا وقتي بار اول بک مي زنه اون رو به عنوان کاربر ميهمان تشخيص مي ده ولي بار دوم با نام کاربريش بهش خوش آمد ميگه که اينم لطف کنيد بگيد چه کار کنم تا اين اتفاق نيفته؟
کدهاي دکمه لوگين
کد:
if (GetMemberAuthenticate(txt_uname.Text, FormsAuthentication.HashPasswordForStoringInConfigFile(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("AdminPage.aspx");
                }  
            }

            Response.Redirect(FormsAuthentication.GetRedirectUrl(txt_uname.Text, chk_rememberme.Checked));
        }
        else
        {
            lbl_login.Visible = true;
        }
کدهايي که در global.asax نوشتم
کد:
HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName.ToString()];
        if (authCookie != null)
        {
            FormsAuthenticationTicket MyTicket;
            MyTicket = FormsAuthentication.Decrypt(authCookie.Value);
            FormsIdentity MyIdentity = new FormsIdentity(MyTicket);
            GenericPrincipal MyPrincipal = new GenericPrincipal(MyIdentity, MyTicket.UserData.Split(new char[] { ',' }));
            Context.User = MyPrincipal;
        }
و کدي که در web.config نوشتم و به اين مسئله مربوط ميشه
کد:
<authentication mode="Forms">
            <forms loginUrl="Default.aspx" defaultUrl="~/"></forms>
        </authentication>
ممنون.
 
پاسخ
#2
واقعاً ديگه موندم چيکار کنم. رفتم با کنترلهاي آماده خود Asp.net امتحان کردم ديدم هر دو مشکل چه مشکل Back براوزر و چه ورود يه فرد با نام کاربري جديد در حالي که خروج رو نزده و صفحه رو نبسته اونجا هم وجود داره.

چرا پس اين ايراد رو از کار من گرفتن؟

خوب حالا چي کار ميشه کرد؟
 
پاسخ
#3
درودالان با موبایلم
سادست
وقتی دکمه خروج رو زد کوکی پاک کن
گروه دور همی پارسی کدرز
https://t.me/joinchat/GxVRww3ykLynHFsdCvb7eg
 
پاسخ
#4
سلام.
لطفاً پيام خصوصي که براتون فرستادم رو جواب بديد خيلي عجله دارم.
بعداً ميام سراغ اين سوال تشخيص هويت.

نقل قول: وقتی دکمه خروج رو زد کوکی پاک کن
مسئله اينه که کاربر a که وارد ميشه بدون اينکه خروج رو بزنه کاربر 2 مي تونه وارد بشه و اين رو از من ايراد گرفتن.
 
پاسخ
#5
براي سوال اولي اومدم يه صفحه ايجاد کردم و دکمه خروج رو در اون گذاشتم.
بعد اين کد رو به رويداد کليک دکمه ورود اضافه کردم
کد:
if (Page.User.Identity.IsAuthenticated)
        {
            Response.Redirect("signout.aspx");
        }
مشکل دکمه back رو هم خيلي به حلش نزديک شدم ولي هنوز به جواب قطعي نرسيدم.
 
پاسخ
#6
ببین
وارد این فروم میشی وقتی یوزر و پسووردو میزنی چرا کس دیگه نمیتونه لاگین کنه؟
کجا ذخیره میشه؟
خوب اینها تو کوکی ذخیره میشه
مشکل شما با کوکیه
باید رو کوکی تشخیص بدی
اینها ببین
http://davestechshop.net/FormsAuthCookie...mainNames2
http://www.codeproject.com/Articles/1387...in-ASP-NET
گروه دور همی پارسی کدرز
https://t.me/joinchat/GxVRww3ykLynHFsdCvb7eg
 
پاسخ
#7
ممنون از راهنمايي خوبتون. با توجه به صحبت شما يه راه ديگه پيدا کردم که فکر مي کنم بهتر از قبليه باشه.
فکر کردم هر چي هست در اين دکمه لوگينه ديگه
خوب اينجا کوکي ايجاد ميشه
خوب اين کدهاي دکمه لوگين
کد:
protected void btn_login_Click(object sender, EventArgs e)
    {
        //if (Page.User.Identity.IsAuthenticated)
       // {

            //Response.Redirect("LogOut.aspx");
       // }
        if (GetMemberAuthenticate(txt_uname.Text, FormsAuthentication.HashPasswordForStoringInConfigFile(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("AdminPage.aspx");
                }  
            }

            Response.Redirect(FormsAuthentication.GetRedirectUrl(txt_uname.Text, chk_rememberme.Checked));
        }
        else
        {
            lbl_login.Visible = true;
        }
    }


خوب وقتي با نام کاربري جديد مي خواد وارد شه
دوباره يه کوکي با همون نام ايجاد ميشه و فکر مي کنم replace ميشه
که اون اتفاق مي افته

گفتم چه جوري نزارم وقتي يکي هنوز خارج نشده
و دوباره دکمه لوگين رو ميزنه کوکي قبلي replace بشه؟

اومدم اين طوري نوشتم در رويداد لوگين
کد:
protected void btn_login_Click(object sender, EventArgs e)
    {
        //if (Page.User.Identity.IsAuthenticated)
        //{

        //    Response.Redirect("LogOut.aspx");
        //}
        if (!Page.User.Identity.IsAuthenticated)
        {
        if (GetMemberAuthenticate(txt_uname.Text, FormsAuthentication.HashPasswordForStoringInConfigFile(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("AdminPage.aspx");
                    }
                }

                Response.Redirect(FormsAuthentication.GetRedirectUrl(txt_uname.Text, chk_rememberme.Checked));
            }
            else
            {
                lbl_login.Visible = true;
            }
        }
        else
        {
            lbl_login.Visible = true;
            lbl_login.Text = "کاربر محترم شما هم اکنون با نام کاربري ديگري وارد شده ايد. لطفاً ابتدا خارج شويد";
        }
    }
از نظر من که مسئله حل شده
حالا اگه شما کار من رو تأييد نمي کنيد لطفاً در ميون بزاريد.
پاورقي:
من فکر مي کردم اين قضيه حل شده و امروز اومدم يه سوال ديگه بپرسم که اين جواب رو ديدم و متأسفانه الآن وقت ندارم سر اين موضوع وقت زيادي بزارم
و برم لينکاي جديد اونم انگليسي بخونم.
اگه امکان داره براتون روي همين کدا نظر بديد و بگيد آيا اين کار جديد من رو تأييد مي کنيد؟
فکر کنم شما با موبايل جواب مي ديد و خودم مي دونم با موبايل نوشتن چقدر سخته بنابراين ازتون انتظار ندارم حتماً جواب بديد
 
پاسخ
#8
درود
این روشم خوبه
چون وقت کمتری دارید اینو تایید میکنم.
گفتم که مشکلتون کوکی بود , البته دیگه مشکلتون حل شد سعی کنید روی کوکی کار کردنش زیاد سورس و مقاله نگاه کنید.
گروه دور همی پارسی کدرز
https://t.me/joinchat/GxVRww3ykLynHFsdCvb7eg
 
پاسخ
  


پرش به انجمن:


Browsing: 4 مهمان