在.NET中检查/读取/编写cookie,请帮助我理解

时间:2010-01-13 19:32:36

标签: c# asp.net cookies

所以我以前从未使用过cookies,但现在我正在制作购物车,他们可以继续回来和离开,但我希望它能存储他们添加的东西。

我想知道:

如何检查cookie是否存在然后创建或更新它,这是考虑使用cookie的最佳方式吗?

我将如何存储数据,特别是我想存储一个ID列表,如“5,6,7,8”,我应该只使用一个字符串,还是比读取更快/更好的方式/解析/写这样的东西?我的意思是我想我会继续添加new_value +','到最后,是否有一个追加cookie变量?

cookie是否有一些唯一的标识符,我会用它来确保我不会写重复或什么?

注意:查看'HOW'很容易看到语法,但我真的想要掌握'最佳方式'或最理想,它是如何使用的,或者你所有程序员发现的是在这种情况下使用它们的最有成效的方法。

3 个答案:

答案 0 :(得分:1)

this similar question的获胜答案表明您只将用户ID存储在Cookie中。其余的都在数据库中。

如果你可以考虑除了cookie以外的其他方法,很多人更喜欢使用会话而不是使用cookie。首先,你并不总是在cookie中有很多空间。

将购物车存储在cookie中意味着您将无法记录人们购物但未购买的内容。

OTOH,使用cookie是使用购物者的存储空间并保留自己的存储空间。这可能会随着时间的推移和很多购物者而显着。

答案 1 :(得分:0)

我过去通过使用传递CookieManager对象的静态方法创建一个管理cookie的类(例如HttpRequest)来解决这个问题。

我试图解决一个非常类似的问题,所以我创建了一个Count cookie,然后创建了一个cookie,用于存储我想要保存的信息(在您的情况下是一个ID号)。我只想保存用户查看的最后5个项目,所以我会在我的CookieManager课程中管理这个项目,将最旧的cookie出列并最新排队。 Count cookie记录了我有多少个cookie。显然,这不是很高技术或安全,但对于这个完全没有必要的项目。任何你想要健壮的东西都应保存在数据库或服务器端的其他地方。

答案 2 :(得分:0)

我想进一步解释为什么你只存储一个映射到cookie中的用户ID的guid。主要有两个原因:

  • 性能。尽管从数据库中提取数据似乎很慢,但您必须记住cookie数据不是免费的。它必须从用户的浏览器上传到您的Web服务器,甚至高速宽带连接的上传速度也会慢得多。相比之下,您的数据库可能直接连接到Web服务器的千兆位链接(有时甚至更快)。因此,为了获得最佳性能,您真正想要的是一个直接映射到数据库表主键的guid。
  • 安全。 Cookie中的数据存储在用户计算机上的纯文本文件中。您永远不知道用户将从何处访问您的网站;它可能是一个非常公开的地方,不适合保存这些数据。

那么有没有数据你可以直接使用cookies?碰巧,有。 Cookie具有粘贴特定机器和浏览器的良好特性。如今,很多人会从多个地方访问网络。也许是工作电脑,家用电脑,智能手机,上网本......所有这些都可能有不同的屏幕尺寸和其他特性。因此,您可以使用cookie执行的操作是特定于用户+位置组合的商店信息。