2010-07-27 27 views
8

ASP.Net MVC'de (veya genel olarak yalnızca çerez işleme) çerezlerle ilgili bazı yönlendirme arıyorum. Bir çerezde form girişi aracılığıyla kimlik doğrulaması yapan kullanıcılar hakkında kimlik doğrulama bilgileri depolamaktayım. Bu harika çalışıyor, ama şimdi çerezde biraz daha fazla bilgi depolamam gerekiyor. Bu ek bilgi gerçekten "kimlik doğrulamasıyla ilişkili" değil, bu yüzden kimlik doğrulama biletinde saklamaktan çekiniyorum. Ek bilgi saklamak için daha iyi bir uygulama var mı. Birden fazla çerez ayarlamak mümkün mü (eğer böyle bir şey iyi/kötü bir uygulamasa)? Burada düşünmem gereken başka şeyler var mı?ASP.Net MVC Çerezleri En İyi Yöntemler

private HttpCookie GetAuthCookie(AuthToken authToken) 
{ 
    var authTokenXml = serializationService.Serialize(authToken); 
    var authCookieString = FormsAuthentication.Encrypt(
     new FormsAuthenticationTicket(
      0, 
      Keys.AuthToken, 
      DateTime.Now, 
      DateTime.Now.AddMinutes(AppSettings.SessionTimeoutMinutes), 
      true, 
      authTokenXml)); 
    var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, authCookieString) 
        { 
         Expires = DateTime.Now.AddDays(AppSettings.AuthCookieExpireDays) 
        }; 
    return cookie; 
} 

cevap

2

bir çerez, 4096 bayt olabilir ne kadar büyük bir boyut sınırı yoktur:

Burada kimlik doğrulama bileti ayarlayabilir ve çerez onu sarmak için kullanıyorum geçerli kodudur. Bundan sonra, çerezleri saklamak için devam etmek istiyorsanız, verileri birkaç çerez haline getirmeniz gerekebilir. Belli ki, artık kimlik doğrulama biletinizi + verilerinizi yeniden oluşturmak için herkesten okuma ek karmaşıklığına sahipsiniz ve bir çerez geri kalanıyla birlikte gönderilmediyse, bazı korkunç sonuçlar doğurabilir.

Farklı bir oturum deposu kullanmayı düşündünüz mü? Bu, kuralı burada olduğu kadar etkili bir şekilde kullanmaktadır ve oturumun erişilebilir olması için kimlik doğrulama ve işleme boru hattında mevcut olması gerekmedikçe, bunu oturuma katmaya eğilimliydim. Oturumu işlemde depolamak istemiyorsanız bir veritabanı gibi bir süreç oturumu deposu kullanabilirsiniz.

+0

Evet, tanımlama bilgisi yaklaşımına alternatif olarak SQL Server Oturum Durumunu kullanmayı düşünüyorum. Kaydetmem gereken ek veriler küçüktür (muhtemelen 20 karakter), bu nedenle tel üzerinde veya çerez boyutu açısından fazla yük eklememelidir. Gerçekten daha iyi bir uygulama olmadığı sürece bu ek bilgiyi saklamak için bir veritabanı kullanmaktan kaçınmayı umuyorum ve bu yüzden buradaki soruyu sordum. Geri bildiriminiz için teşekkürler. – Paul

+0

sadece 20 karakterse, muhtemelen çerezde herhangi bir zarar görmüyor. Eğer bu küçük olsa da, proc oturumunu kullanarak da iyi bir uyum olabilir. Belki iki yolu da dene ve hangisinin tercih edildiğini görüyor musun? –

1

Kimlik doğrulama bilgisi için kimlik doğrulama verileri dışında hiçbir şey koymamalısınız. Asp.net çerezlerin kullanımı web için herhangi bir programlama platformunda olduğu gibidir. İstediğiniz kadar çok sayıda çerez ayarlayabilir ve istediğiniz gibi saklayabilirsiniz. Bazı örnekler: Başparmak

http://www.cookiecentral.com/faq/

http://stephenwalther.com/blog/archive/2008/07/08/asp-net-mvc-tip-15-pass-browser-cookies-and-server-variables-as-action-parameters.aspx

http://www.asp.net/general/videos/read-write-and-delete-cookies-in-aspnet

12

Kural: çerezi sadece asgari (genellikle kullanıcının id) mağaza ve dinlenme getirmek için bu minimumu kullanmak ihtiyacınız olan her zaman veri mağazanızdan. Eğer performanstan memnunsanız, okumayı durdurabilirsiniz.

Veri mağazanızda çok fazla sorgu olduğunu fark ederseniz, oturumları kullanabilir veya sorgularınızın sonuçlarını önbelleğe alabilirsiniz.

İlgili konular