2016-10-09 88 views
0

在Black Jack遊戲上工作,我試圖將玩家的餘額保存爲cookie。我無法讓它正常工作。退出瀏覽器並重新加載網頁時,Cookie始終爲空。爲什麼我的cookie在C#ASP.NET空白Web項目中顯示爲空?

我將cookie聲明爲靜態變量,因此我可以在稍後的方法中將其發送給客戶端。

public partial class BlackJack : System.Web.UI.Page 
    { 
    public static HttpCookie cookie; 

protected void Page_Load(object sender, EventArgs e) 
    { 
     cookie = Request.Cookies["Balance"]; 

     if (!IsPostBack) 
     { 
      if (cookie != null) 
      { 
       PlayerBalance = Convert.ToInt32(cookie.Values["balance"]); 
       if (PlayerBalance == 0) 
       { 
        PlayerBalance = 250; 

       } 

      } 
      else 
      { 
       PlayerBalance = 250; 
       HttpCookie cookie = new HttpCookie("Balance"); 
       cookie.Values.Add("balance", PlayerBalance.ToString()); 
       cookie.Expires = DateTime.Now.AddYears(1); 
       Response.Cookies.Add(cookie); 
      } 
      PlayerBet = 0; 
     } 

然後在後面的每個手後運行的方法中,我用Response.Cookies.Add()保存cookie。

public void Other Method() 
{ 
cookie = Request.Cookies["Balance"]; 
      cookie.Values["balance"] = PlayerBalance.ToString(); 
      Response.Cookies.Add(cookie); 
} 

但是,如果我關閉了瀏覽器並返回到站點,cookie始終爲空。

+0

你是什麼意思_「餅乾總是空」 _,你究竟在什麼時候觀察這個以及如何?此外,您知道Cookie是用戶可編輯的,因此用戶可以根據自己的需要重新設置它們的平衡嗎? – CodeCaster

+0

不知道cookie是用戶可編輯的,謝謝你的信息。這只是一個有趣的項目,所以我會探索其他選項,但我想弄清楚cookie。 「Always」無效是一種糟糕的表達方式,我的錯誤。但是在調試時,當我逐步執行代碼時,cookie將具有正確的值,但是當我停止並再次開始調試時,我無法獲取cookie以獲取以前的餘額,它表示值爲空。 發佈項目後,我看到同樣的事情發生。打開和關閉瀏覽器後,我無法取回以前的餘額。 – Chris

回答

0

默認情況下Cookie不是永久性的。這意味着只要您沒有指定瀏覽器在關閉瀏覽器時清除它的cookie的到期日期。

因此,在這種情況下,你需要一個持久性cookie,這可以通過設置Expires - 屬性創建:

var cookie = new HttpCookie("Balance"); 
cookie.Expires = DateTime.Now.AddDays(1); 

有關詳細信息看看這個全面的文章:https://msdn.microsoft.com/en-us/library/ms178194.aspx

但請注意@CodeCaster已經說過了什麼:Cookie只是客戶端可以輕鬆修改的一小段文本。所以你應該考慮在其他地方存儲敏感信息。或者至少你應該考慮加密你的cookies。

+0

我已經有'cookie.Expires = DateTime.Now.AddYears(1)'在我的if else結構中,否則(當cookie = null時)。 我會研究其他方法來實現這一點,但現在我想弄清楚我的問題與這個cookie。 – Chris

+0

好吧,但在其他分支的一個斷點,並檢查cookie是否真的創建。另外在你的'OtherMethod'中,你沒有明確設置過期日期。請檢查以前設置的日期是否仍然存在。 – khlr

+0

做到了!我想在其他方法中使用請求時,它會失去過期日期。謝謝! – Chris

0

刪除線

public static HttpCookie cookie; 

這將創建一個非線程安全的類型的cookie。在mutitreaded環境將有陷入困境的價值。

這工作fine..Your static導致problem.Create每一個cookie的每一個方法,並與同名轉儲它在瀏覽器Response.Cookies.Add(cookie)

protected void Page_Load(object sender, EventArgs e) 
    { 
     HttpCookie cookie = new HttpCookie("Balance"); 
     cookie.Values.Add("balance", "akash".ToString()); 
     cookie.Expires = DateTime.Now.AddYears(1); 
     Response.Cookies.Add(cookie); 
    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     var cookie = Request.Cookies["Balance"]; 
     cookie.Values["balance"] = "ggg".ToString(); 
     Response.Cookies.Add(cookie); 
    } 
相關問題