Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的cookie在C#ASP.NET空Web项目中显示为null?_C#_Asp.net_Cookies - Fatal编程技术网

为什么我的cookie在C#ASP.NET空Web项目中显示为null?

为什么我的cookie在C#ASP.NET空Web项目中显示为null?,c#,asp.net,cookies,C#,Asp.net,Cookies,我正在做一个黑杰克游戏,我试图把玩家的平衡保存为一块饼干。我不能让它正常工作。退出浏览器并重新加载网页时,cookie始终为空 我将cookie声明为静态变量,以便可以在稍后的方法中访问并将其发送到客户端 public partial class BlackJack : System.Web.UI.Page { public static HttpCookie cookie; protected void Page_Load(object sender, EventArgs

我正在做一个黑杰克游戏,我试图把玩家的平衡保存为一块饼干。我不能让它正常工作。退出浏览器并重新加载网页时,cookie始终为空

我将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


但是如果我关闭浏览器并返回站点,cookie总是空的

默认情况下,Cookie是非持久性的。这意味着,只要不指定cookie的过期日期,浏览器就会在关闭浏览器时清除cookie

因此,在这种情况下,您需要一个持久cookie,可以通过设置
Expires
-属性来创建:

var cookie = new HttpCookie("Balance");
cookie.Expires = DateTime.Now.AddDays(1);
有关更多详细信息,请参阅这篇全面的文章:

但请注意@CodeCaster已经说过的话:cookie只是一小段文本,客户端可以轻松修改它。所以你应该考虑在别处存储敏感信息。或者至少应该考虑对cookies进行加密。

< P>删除行< /P>
public static HttpCookie cookie;
它将创建一个非线程安全类型的cookie。在多线程环境中,它将具有混乱值

这很好。您的
static
导致了问题。使用每个方法创建cookie,并将其转储到浏览器
Response.Cookies上。使用相同的名称添加(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);
    }

你所说的“cookie总是空的”是什么意思?你到底在什么时候观察到了这一点,又是如何观察到的?另外,您知道Cookie是用户可编辑的,因此用户可以根据自己的意愿重置余额?不知道Cookie是用户可编辑的,谢谢您提供的信息。这只是一个有趣的项目,所以我会探索其他的选择,但我想找出饼干不管。“总是”空是一个糟糕的说法,我的错误。但在调试时,当我逐步完成代码时,cookie将具有正确的值,但当我停止并再次开始调试时,我无法获取cookie以获得以前的余额,它表示该值为空。发布项目后,我看到同样的事情发生了。打开和关闭浏览器后,我无法获取以前的余额。我的if-else结构中的else(当cookie=null时)下已经有
cookie.Expires=DateTime.Now.AddYears(1)
。我将研究其他方法来实现这一点,但现在我想找出我对这个cookie的问题。好的,但是在else分支中有一个断点,并检查cookie是否真的被创建过。此外,在
OtherMethod
中,您没有明确设置过期日期。请检查以前设定的日期是否仍然存在。就是这样!我认为在另一种方法中使用请求时,它丢失了过期日期。谢谢
    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);
    }