2011-06-10 24 views
7

Kullanıcının kullanıcı kimliğini sürdürmek için kullanıyorum bir çerez var, ancak yeni bir değerle değiştirerek zor bir zaman geçiriyorum. MSDN'ye göre, sadece değerin üzerine yazabilmem gerekir, fakat çalışmadı. Bir işleyicide giriş mantığını yapıyorum ve başarılı olurlarsa kullanıcıyı yeni bir web sayfasına yönlendiriyorum.HttpHandler'da Çerez Değerini Değiştirme

public void ProcessRequest(HttpContext context) 
{ 
    User user = User.FindByUsernameAndPassword(
     context.Request.Form["username"], 
     context.Request.Form["password"]); 

    context.Response.Cookies["user_id"].Value = user.ID.ToString(); 

    context.Response.Redirect("/profile", true); 
} 

bunu ilk kez giriş iyi çalışıyor, ama yeni bir kullanıcı kimliği ile işleyicisi vurarak benim şimdiki çerez üzerine çalışırsanız, çerez değerini değiştirmez ve ben açmış edilmeye devam ben vurduğum zamanki gibi.

Diğer sayfalar giriş yapmak için çerezi kullanır, ancak kullanıcı kimliği değişmediğinden oturum açmış kullanıcıyı değiştirmez.

public User User { get; set; } 

public override void Page_Load() 
{ 
    this.User = User.Find(int.Parse(Request.Cookies["user_id"].Value)); 
} 

cevap

6

deneyin ekleyerek .Value

context.Response.Cookies["user_id"].Value = user.ID.ToString(); 
+0

Üzgünüz, bu bir yazım hatasıydı. Kod, '.Value' olmadan yaparsanız bile derleme yapmaz. –

+1

Çerezin değerini değiştirmeden önce var olup olmadığını kontrol etmemiz gerekiyor mu, başka bir deyişle, çerez yok ise hata olur mu ve mevcut olmayan bir çerezin değerini değiştirmeye çalışıyoruz? – sajanyamaha

+0

evet, çerez null ise, Value özelliği – carlbenson

4

MSDN site göre, aynı adla yeni bir çerez yazmak zorunda değil, sadece onu değiştirin:

değiştirme ve silme Çerezler

Doğrudan yönlendiremezsiniz Bir kurabiye ye. Bunun yerine, bir çerezi değiştirmek, yeni değerleri içeren yeni bir tanımlama bilgisi oluşturup tarayıcısını ve tarayıcısını istemciye eski sürüm üzerine yazmak için tarayıcıdan oluşur. Aşağıdaki kod örnek siteye kullanıcının ziyaretlerin sayısını depolayan bir çerez değerini nasıl değiştirilebileceğini gösteriyor:

int counter; 
if (Request.Cookies["counter"] == null) 
    counter = 0; 
else 
{ 
    counter = int.Parse(Request.Cookies["counter"].Value); 
} 
counter++; 

Response.Cookies["counter"].Value = counter.ToString(); 
Response.Cookies["counter"].Expires = DateTime.Now.AddDays(1); 

ben ekleme hakkında ilk yazı ile kabul ediyorum. Değer özelliği ve belki de .Expires ekleyin ve ne olduğunu görün.

+0

erişemiyorsanız, onun değerini değiştirmeden önce çerez olup olmadığını denetlememiz gerekir, başka bir deyişle, çerez yok ve biz bir olmayan çerez var mı? – sajanyamaha

İlgili konular