2011-06-10 54 views
7

我有一個cookie用於保存用戶的用戶ID,但我很難用新值替換它。根據MSDN,我應該能夠簡單地覆蓋這個值,但它一直沒有工作。我在處理程序中執行登錄邏輯,並在用戶成功時將用戶傳遞到新的網頁。在HttpHandler中修改Cookie的值

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); 
} 

我第一次登錄,它工作得很好,但如果我嘗試擊中一個新的用戶ID的處理程序覆蓋我目前的cookie,它不更改cookie值和我繼續記錄作爲用戶時,我是當我打它。

其他頁面使用cookie登錄,但由於用戶標識未更改,它不會更改登錄用戶。

public User User { get; set; } 

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

回答

6

嘗試增加.Value

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

對不起,這實際上是一個錯字。如果沒有'.Value',代碼甚至不會編譯。 – 2011-06-10 03:07:20

+1

我們是否需要在修改其值之前檢查cookie是否存在,換句話說,如果cookie不存在,它會發生錯誤,我們嘗試修改不存在的cookie的值? – sajanyamaha 2013-04-18 13:25:22

+0

是的,如果cookie爲空,則無法訪問其Value屬性 – carlbenson 2013-04-18 14:59:01

4

按照MSDN site,你寫的同名一個新的cookie,而不是僅僅修改:

修改和刪除餅乾

你不能直接mo不同的cookie。 取而代之,更改Cookie由 創建一個具有新值的新餅乾 ,然後將cookie發送到 瀏覽器以覆蓋客戶端上的舊版本 。下面的代碼 示例演示如何更改存儲用戶訪問網站的次數 一個cookie的 值:

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); 

我先上後有關將同意。 Value屬性,然後添加.Expires,看看會發生什麼。

+0

我們是否需要在修改其值之前檢查cookie是否存在,換句話說,如果cookie不存在,那麼它會出錯,我們嘗試修改不存在的cookie? – sajanyamaha 2013-04-18 13:25:39