2012-01-13 21 views
15

Form kimlik doğrulaması ile ASP.NET MVC 3 kullanıyorum (dosya -> yeni ile aldığınız değiştirilmiş vanilla hesap koduna göre). Neden ASP.NET MVC kalıcı kimlik doğrulama çerezim çalışmıyor?

siteye girmek

, ben Yani bu kalıcı bir çerez belirlesin

FormsAuthentication.SetAuthCookie(userName, true); 

bir auth tanımlama bilgisi kuruyorum. Ancak tarayıcıyı kapatıp tekrar açsam, siteye göz attığımda tekrar giriş yapmak zorunda kalırım! Tarayıcıyı kapattığımda çerezin (.ASPXAUTH) oluşturulduğunu ve silinmediğini krom dev araçlarını kullanarak görebiliyorum, bu yüzden neler oluyor?

Benim web.config: Bir değişiklik olup olmadığını

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogIn" timeout="10000"/> 
</authentication> 

Ben IIS altında, lokal bu test ediyorum. Kimlik doğrulama bileti kullanarak kendime bir çerez oluşturmalıyım.

+1

bu cevabı kontrol edebilirsiniz: http://stackoverflow.com/questions/682788/making-user-login-persistant-with-asp-net-membership – alexl

+2

Tamam, bu bağlantı benim için sıralama gibi görünüyor - SetAuthCookie ile ve benim çerez tanımlama (web.confg) açık bir şekilde ayarlamak için benim yapılandırma tweaking, ve tüm şimdi çalışıyor. Tuhaf! –

+0

@Matt Roberts - Neden oldugunu bilmiyorum ama cookie ismini ayarlamak benim için de onardi. Bunun sadece alan adıyla ilgili olan çerezle çalışacağını düşünebilirsiniz. Bu MVC veya .NET'de bir hata olabilir mi? – Greg

cevap

3

: Bu yanıtı kontrol edebilirsiniz

: Making user login persistant with ASP .Net Membership

Tamam, bu bağlantı benim için sıralamak gibiydi - Açıkça çerez adını ayarlamak için SetAuthCookie ile yapışmasını ve benim yapılandırma verdiği (web.confg'da) ve her şey şimdi çalışıyor. Tuhaf! -

8

SetAuthCookie, başlık altında bir auth bileti oluşturur. Kendi auth biletini yapmaya çalıştın mı? , fazladan veri depolamanıza izin verecektir. Bu yardımcı olur

// create encryption cookie   
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, 
     userName, 
     DateTime.Now, 
     DateTime.Now.AddDays(90), 
     createPersistentCookie, 
     string.Empty); 

// add cookie to response stream   
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);  
System.Web.HttpCookie authCookie = new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
if (authTicket.IsPersistent) 
{  
     authCookie.Expires = authTicket.Expiration; 
} 
System.Web.HttpContext.Current.Response.Cookies.Add(authCookie); 

Umut:

İşte bir örnek. @alexl gelen yorumun çözüldü

+0

Teşekkürler. Yani SetAuthCookie'yi hiç kullanmamalı mıyım? MSDN belgeleri, bana kalıcı olabilecek bir auth çerezi oluşturmak için kullanmamı söylüyor. Ayrıca, yeni bir MVC uygulaması için vanilla kodu SetAuthCookie kullanıyor - bu yanlış mı? –

+0

SetAuthCookie() küresel olarak aynı şeyi yapıyor. Sadece garip çünkü her zaman işe yaramıyor gibi görünüyor. Bir kimlik doğrulama bileti myslef oluşturmayı ve yanıt akışına eklemeyi tercih ediyorum. –

+0

ayrıca sorunuza yorum olarak gönderilen @alexl bağlantısına da göz atın. –

İlgili konular