为什么我的cookie在C#ASP.NET空Web项目中显示为null?
我正在做一个黑杰克游戏,我试图把玩家的平衡保存为一块饼干。我不能让它正常工作。退出浏览器并重新加载网页时,cookie始终为空 我将cookie声明为静态变量,以便可以在稍后的方法中访问并将其发送到客户端为什么我的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
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);
}