PDA

View Full Version : حرفه ای: لوگ این در سایت



Mohammad_dn
یک شنبه 16 اردیبهشت 1397, 22:46 عصر
من دوتا سایت دارم رو دو هاست مختلف

در هر دو سایت بخشی برای ورود به سایت وجود داره..و در هر دو صفحه ی ورود یک چک باکس به عنوان "مرا به خاطر بسپار" که برای ورود طولانی به سایت هست
کدی که من برای قسمت مرا به خاطر بسپار استفاده کردم:


//set the new expiry date - to thirty days from now
DateTime expiryDate = DateTime.Now.AddDays(30);

//create a new forms auth ticket
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2, lng.UserName, DateTime.Now, expiryDate, true, String.Empty);

//encrypt the ticket
string encryptedTicket = FormsAuthentication.Encrypt(ticket);

//create a new authentication cookie - and set its expiration date
HttpCookie authenticationCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
authenticationCookie.Expires = ticket.Expiration;

//add the cookie to the response.
Response.Cookies.Add(authenticationCookie);
Response.Redirect("~/Panel");


همونطور که در تصویر ضمیمه میبینید تاریخ انقضای کوکی برای 30 روز دیگه هست اما کاربر از حالت لوگ این خارج شده و به صفحه ی لوگ این هدایت میشه ..در صورتی که باید به صفحه ی داشبورد هدایت بشه
جالب اینجاست که من همین سایت رو روی لوکال ، هم روی iis express و هم روی iis تست کردم و بدون مشکل کار میکنه ولی وقتی میارم روی هاست کلا از کار میفته

Moien Tajik
دوشنبه 17 اردیبهشت 1397, 10:21 صبح
معمولا این مشکل بخاطر وجود نداشتن Machine Key رخ میده.
روی shared host ها ، application pool در صورت inactive بودن سایت recycle میشه.


وقتی این اتفاق رخ میده ، خود asp.net میاد machineKey جدیدی رو ایجاد میکنه ، " اگر داخل web.config خودتون machineKey پیشفرضی رو تعریف نکرده باشید."


از machineKey برای ایجاد authentication ticket استفاده میشه ; پس وقتی application pool میاد recycle میشه ، چون شما داخل web.config از قبل machine key ندارید ، یک key جدید بطور خودکار generate میشه و این باعث میشه که authentication ticket فعلی غیر معتبر بشه.


غیر معتبر شدن authentication ticket باعث logout شدن کاربران میشه.


وقتی بطور پیشفرض خودتون داخل web.config بیاید machine key ست کنید ، بعد از recycle شدن application pool ، دوباره از همون key قبلی برای ایجاد authentication ticket جدید استفاده میکنه ، پس در نتیجه ticket فعلی با ticket قبلی برابر میشن و باعث میشه ticket معتبر باقی بمونه.

از این سایت میتونید Machine Key دریافت کنید : http://allkeysgenerator.com