簡體   English   中英

為什么我的Cookie在C#ASP.NET空Web項目中顯示為null?

[英]Why is my cookie showing as null in C# ASP.NET Empty Web Project?

在玩Black Jack游戲時,我試圖將玩家的余額保存為cookie。 我無法使其正常工作。 退出瀏覽器並重新加載網頁時,cookie始終為null。

我將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始終為null。

默認情況下,Cookie是非永久性的。 這意味着只要您不指定Cookie的到期日期,瀏覽器就會在您關閉瀏覽器時將其清除。

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

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

有關更多詳細信息,請參見這篇綜合文章: https : //msdn.microsoft.com/zh-cn/library/ms178194.aspx

但是請注意@CodeCaster已經說過:Cookie只是一小段文本,客戶端可以輕松修改。 因此,您應該考慮將敏感信息存儲在其他位置。 或者至少您應該考慮對Cookie進行加密。

刪除線

public static HttpCookie cookie;

它將創建非線程安全類型的cookie。在經過多線程讀取的環境中,它將具有混亂的價值。

您的static問題會導致此問題。每個方法都創建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);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM