PDA

View Full Version : خالی بودن مقدار HttpContext.Current.User.Identity.Name



resident
شنبه 06 تیر 1394, 17:53 عصر
سلام.
وقتی کاربر تو برنامم لاگین می کنه ، با کد زیر ID شو نگه میدارم:

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, authenticatedUser.Id.ToString(), DateTime.Now, DateTime.Now.AddDays(1), false, authenticatedUser.Id.ToString());
string cookieData = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieData)
{
HttpOnly = true,
Expires = ticket.Expiration
};

System.Web.HttpContext.Current.Response.Cookies.Ad d(cookie);




تو برنامم هر جا هم میخوام بخونم از Int32.Parse(HttpContext.Current.User.Identity.Name ) استفاده می کنم
اما مشکل اینجاست که HttpContext.Current.User.Identity.Name بعضی وقتها خالی است و بعضی وقتها آیدی کاربر رو بر می گردونه. مشکل کجاست؟
نکته اینجاست که بدون اینکه از برنامه خارج بشم، HttpContext.Current.User.Identity.Name بعضی وقتا مقدار داره بعضی وقتا هم نداره

خیلی کارم ضروریه. لطفا سریعتر راهنماییم کنید...

hakim22
یک شنبه 07 تیر 1394, 01:01 صبح
برای بدست آوردن آی دی از HttpContext.User.Identity.GetUserId() استفاده کنید.

resident
یک شنبه 07 تیر 1394, 09:51 صبح
برای بدست آوردن آی دی از HttpContext.User.Identity.GetUserId() استفاده کنید.

ممنون از وقتی که گذاشتید.
این تو MVC5 است؟
من از MVC 4استفاده می کنم. تو ورژن 4 چکار باید کرد؟

itsurge
یک شنبه 07 تیر 1394, 15:25 عصر
خوب کوکی برنامه تو چک کن ببین وجود داره یا نه !! این نکته رو توجه کن که حداکثر حجم کوکی برای یک سایت 4 کیلو بایت هست اگه از این مقدار بیشتر باشه در مرورگر ذخیره نمیشه من احتمال می دم از این باشه چک کن

resident
یک شنبه 07 تیر 1394, 15:37 عصر
خوب کوکی برنامه تو چک کن ببین وجود داره یا نه !! این نکته رو توجه کن که حداکثر حجم کوکی برای یک سایت 4 کیلو بایت هست اگه از این مقدار بیشتر باشه در مرورگر ذخیره نمیشه من احتمال می دم از این باشه چک کن

آخه موضوع اینه که الان ممکنه مقدار نداشته باشه و 1 دقیقه بعد مقدار داشته باشه، بدون اینکه دوباره وارد سیستم شده باشم!!!

itsurge
یک شنبه 07 تیر 1394, 15:49 عصر
خوب بهتر بری یک فیلتر از نوع AuthorizeAttribute بنویسی و در قسمت OnAuthorization چک کن کوکی مورد نظرت مقدار داره یا نه در صورت نداشتن هدایتش کن به صفحه ورود نمونه کد
public class LogOnAuthoRization: AuthorizeAttribute
{
public override void OnAuthorization(System.Web.Http.Controllers.HttpAc tionContext actionContext)
{
var isAuthorised = base.IsAuthorized(actionContext);

if (isAuthorised)
{
var cookie = HttpContext.Current.Request.Cookies
[FormsAuthentication.FormsCookieName];
var ticket = FormsAuthentication.Decrypt(cookie.Value);
var identity = new GenericIdentity(ticket.Name);
string userData = ticket.UserData;
if (userData.Contains("_"))
{
string[] data = userData.Split('_');
if (data != null && data.Length > 3)
{
string Email = data[0];
string Id = data[1];
string FullName = data[2];
string Role = data[3];
var principal = new CustomUserPrincipal
(identity, new Guid(Id), Email, Role, FullName);
HttpContext.Current.User = principal;
Thread.CurrentPrincipal = principal;
}
}
}
}
}

mudur2
یک شنبه 07 تیر 1394, 16:51 عصر
لازم نیست که از context استفاده کنید
به صورت زیر هم میشه نام کاربر رو برگردوند

mudur2
یک شنبه 07 تیر 1394, 16:51 عصر
به این صورت


var user = await UserManager.FindByIdAsync(User.Identity.GetUserId( ));