繁体   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