ठीक है, प्रमाणीकरण कुकी बनाने के लिए मेरा कोड यहां है:लगातार प्रमाणीकरण कुकी बनाने में समस्या: एएसपी.नेट एमवीसी
// get user's role
List<UserType> roles = rc.rolesRepository.GetUserRoles(rc.userLoginRepository.GetUserID(userName));
List<string> rolesList = (from r in roles
select r.ToString()).ToList();
string[] rolesArr = rolesList.ToArray();
// create encryption cookie
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,
userName,
DateTime.Now,
DateTime.Now.AddDays(90),
createPersistentCookie,
String.Join(";",rolesArr) //user's roles
);
// add cookie to response stream
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
System.Web.HttpCookie authCookie = new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);
//FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
और उपयोगकर्ता कोड में उपयोगकर्ता भूमिकाओं को सेट करने के लिए Global.asax में मेरा कोड है:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie == null || authCookie.Value == "")
{
return;
}
FormsAuthenticationTicket authTicket = null;
try
{
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
string[] roles = authTicket.UserData.Split(new char[] { ';' });
if (Context.User != null)
{
Context.User = new System.Security.Principal.GenericPrincipal(Context.User.Identity, roles);
}
}
catch
{
return;
}
}
हालांकि, अगर "createPersistentCookie" शीर्ष उदाहरण में सत्य है, कोई लगातार कुकी नहीं बनाई गई है। अगर मैं इस तरह की आखिरी पंक्ति को अनदेखा करता हूं:
//System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
तब लगातार हार्ड मेरी हार्ड ड्राइव पर बनाई गई है। लेकिन फिर Global.asax कोड में, "authTicket" में UserData फ़ील्ड खाली है, इसलिए मैं भूमिकाओं को ठीक से सेट नहीं कर सकता!
इसलिए मुझे लगातार कुकी बनाने के लिए SetAuthCookie का उपयोग करना है, लेकिन फिर किसी कारण से उपयोगकर्ता डेटा फ़ील्ड लगातार कुकी से गायब हो जाता है।
इसका उत्तर क्या है ??
हाँ, यह है कि यह किया! बहुत बहुत धन्यवाद। मैं अपने बालों को फाड़ रहा हूं। अब मैं Response.Cookies का उपयोग कर सकता हूं। SetAuthCookie के बजाय जोड़ें, और एक सतत कुकी बनाई गई है, और UserData को खाली नहीं किया गया है (अजीब!) – Cynthia