PDA

View Full Version : مبتدی: چطور کاربر login شده رو از کوکی بخونم؟؟؟



mana6485
پنج شنبه 03 مرداد 1392, 19:42 عصر
چطور کاربر login شده رو از کوکی بخونم؟؟؟

parvizwpf
جمعه 04 مرداد 1392, 02:35 صبح
شما الان مگه کوکی تعریف کردید؟ کوکی رو فراموش برید سراغ سشن.

iman mohadesi
چهارشنبه 16 مرداد 1392, 22:04 عصر
کوکی تو mvc معنا نداره .بعد واسه چی میخوای کاربر از کوکی بخونی؟؟

hakim22
پنج شنبه 17 مرداد 1392, 09:53 صبح
از HttpContext برای ساختن و بازخوانی Session استفاده کنید. میتوانید اطلاعات کاربری که login کرده در آنجا ذخیره کنید.

وقتی کابری login میکنه باید این کد رو اجرا کنید تا نام کاربری اون در cookie مخصوص Authentication ثبت بشه


FormsAuthentication.SetAuthCookie(username,false)

Wily_Fox
پنج شنبه 17 مرداد 1392, 10:19 صبح
وقتی کاربری لاگین میکنه مگه نیازه اونو در کوکی یا سشن ذخیره کنیم؟

خودش که اینکار رو میکنه. لزومی نداره ما اینارو ست کنیم.

Saeed_m_Farid
پنج شنبه 17 مرداد 1392, 11:22 صبح
چطور کاربر login شده رو از کوکی بخونم؟؟؟
اطلاعات کاربر رو چه در Controller و چه در View می تونید با User.Identity بدست بیارید، این اطلاعات در Http request جاری بدست شما میرسه و لازم نیست کار اضافه ای انجام بدین، مثلاً User.Identity.IsAuthenticated نشون میده لاگین شده یا نه؟ یا User.Identity.Name نام کاربر لاگین شده و ...


شما الان مگه کوکی تعریف کردید؟ کوکی رو فراموش برید سراغ سشن.

کوکی تو mvc معنا نداره .بعد واسه چی میخوای کاربر از کوکی بخونی؟؟
من که فکر میکنم برعکسه! سشن برای ASP کلاسیک بود و درصورت عدم استفاده صحیح (که معمولاً هم همینطور هست!) بار پردازشی زیاد روی سرور میندازه و روی حافظه و پردازش موازی درخواست ها تاثیر مخرب داره (سریالایز نشدن صحیح درخواست ها در سرور (http://www.hpenterprisesecurity.com/vulncat/en/vulncat/dotnet/asp_dotnet_bad_practices_non_serializable_object_s tored_in_session.html))؛ از طرف دیگه خود Session هم سمت کلاینت از Cookie برای نگهداری SessionID استفاده میکنه و سمت سرور برای بازیابی Session از اون استفاده میکنه؛ خلاصش اینکه اگه داده ها طوری هست که میشه با Cookie از عهدش بر اومد (Dictionary, Object و ... نیستن) بهتره کلاً سشن تو Web.config غیرفعال بشه (http://www.dotnettips.info/post/875/%D8%A7%D8%AB%D8%B1-%D9%88%D8%AC%D9%88%D8%AF-%D8%B3%D8%B4%D9%86-%D8%A8%D8%B1-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4-%D9%85%D9%88%D8%A7%D8%B2%DB%8C-%D8%AF%D8%B1-asp-net) تا کارآئی کلی سایت بره بالا ...
بیشتر (http://forums.asp.net/t/1110947.aspx/1)

younesdoost
پنج شنبه 17 مرداد 1392, 12:05 عصر
یه همچین کلاسی مثل چیزی که تو زیره بسازید و هر وقت کسی خواست لاگین کرد پاسش بدید به این کلاس:

public void SetAuthenticationToken(string name, bool isPersistant, User userData)
{
string data = null;
if (userData != null)
data = new JavaScriptSerializer().Serialize(userData);
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, name, DateTime.Now, DateTime.Now.AddYears(1), isPersistant, userData.UserId.ToString());
string cookieData = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieData)
{
HttpOnly = true,
Expires = ticket.Expiration
};

HttpContext.Current.Response.Cookies.Add(cookie);
}


بعد تو اکشن لاگین بنویسید:

var authenticatedUser = userApp.GetUserByEmailAndPassword(user);
if (authenticatedUser != null)
{
context.SetAuthenticationToken(authenticatedUser.E mail, false, authenticatedUser);
return RedirectToAction("Index");
}


که تو خط اول می خونم ببینم همچین کاربری وجود داره یا نه که اگه داشت میفرستمش تو اون کلاسه که براش کوکی بسازه.
بعد هر جا بخواید دیگه می تونید با کلمه ی کلیدی User کاربر رو از کوکی بخ.نید.اطلاعاتی مثل اینکه این کاربر الان لاگین هستش یا نه (User.Identity.IsAuthenticated) یا چیزایی مثل نام طرف(User.Identity.Name)(که می تونید به جای نام UserId) طرف رو تو این متغیر بریزید و...
که البته راهش اینه که یه متد استاتیک داشته باشید که تمام اطلاعات کاربر لاگین کرده رو (کاربر لاگین کرده رو همونطور که خط بالا گفتم می تونید پیداش کنید) از دیتابیس بخونه و هر جا خواستید این تابع مفید رو صدا بزنید.از تابع استفاده کنید و باهاش کار کنید خودتون متوجه می شید.