高分求解Cookie的能够保存的最大长度、长度的计算方法。

MaJiaP 2009-01-20 05:44:34
最近因为要用到Cookie保存较大的一些数据,很是郁闷,问题如下。

1、Cookie能保存的最大的长度一般来讲是4K。但是我是用IE7测试时,在一个Cookie中保存80K数据依然读取正常,为什么?使用Firefox测试,如果Cookie超过4K将不会当前页面。

2、中文编码的字符,UTF8一个中文占3个字节,GB2312一个中文占2个字节,其他ASCUU编码都是一个字节。编码后的中文混合其他字符如何判断Cookie中保存的数据的长度?
...全文
4554 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
besook 2011-04-05
  • 打赏
  • 举报
回复
一般在Cookie中存一个标识,对应服务器中一个数据块(可以是任何形式);
根据用户Cookie,找出数据;
比如:
购物车,只要把商品的ID和数量保存在cookie中就可以了,商品名称、描述、链接地址等是不会放的。

i地主 i喜儿
m20091227 2010-03-12
  • 打赏
  • 举报
回复
Zs cdss frere\n\rdadadas
m20091227 2010-03-12
  • 打赏
  • 举报
回复
adasdasdasddadadad\n\rdasdas
liyu355 2009-03-12
  • 打赏
  • 举报
回复
ie的cookie是保存在文件里面的。firefox的cookie是保存在sqlite数据库里面的。
本身就不具备可比性
lianhui1122 2009-01-23
  • 打赏
  • 举报
回复
cookie session中都 不要放太多东西
杏鲍菇 2009-01-23
  • 打赏
  • 举报
回复
把cookie值取出来,不能判断长度吗
MaJiaP 2009-01-23
  • 打赏
  • 举报
回复
另外再讲一下Cookie的长度计算以编码后保存的字符数量为准,可以用Cookie.Value.Length来判断长度。
MaJiaP 2009-01-23
  • 打赏
  • 举报
回复
今天总算找到了原因,实际上这个问题算是asp.net跟我程序自身的bug了。

以前用cookie的时候如果Cookie中的数据超过4K就不会发到客户端了,这次确发送过来了,非常奇怪。今天总算找到原因了。主要问题是我测试的程序有问题,因为随便学的所以没太注意。在测试的程序中每次都会写Cookie,而,不是原本的第一次设置时写Cookie,其他时候并不写入Cookie。

但这里也发现了一个问题,asp.net的程序在同一个请求中如果先写入Cookie,然后读取这个Cookie时不会读取客户端发送过来的Cookie,而是直接读取写入的这个Cookie。所以也就造成了前面讲得Cookie的大小竟然没限制,实际上还是不能超过4K的,不知道算不算是asp.net的bug,感觉这种情况应该抛出异常才对。
wsg13793257207 2009-01-22
  • 打赏
  • 举报
回复
学习了·
BossFriday 2009-01-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 winner2050 的回复:]
数据量大就根本不应该放coookie
[/Quote]
楼主绝对应该改变策略.
lfywy 2009-01-22
  • 打赏
  • 举报
回复
一般都存标识什么的,存那么大干嘛呢?
MaJiaP 2009-01-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 f800051235 的回复:]
个人认为cookie里面存大容量的东西不好,楼主你要向cookie里面存什么?最好是想个其他的方法代替一下。
[/Quote]

这个前面讲了,是为了避免查询数据库保存一些显示用的数据了。

[Quote=引用 11 楼 cndotaci 的回复:]
敢问LZ80K用才存些什么东西?
[/Quote]

这个当然用不了80K了,我的意思是我测试的时候保存了80K数据竟然没问题,更大的数据也就懒得测试了。不知道IE7的Cookie到底是怎么回事了。我以前测试的时候,用IE保存的数据超过4K,这个Cookie就不会被发送到客户端,不知道是最近IE7的补丁做了修改,还是我用的VS2008的SP1作了修改。
云想慕尘 2009-01-20
  • 打赏
  • 举报
回复
敢问LZ80K用才存些什么东西?
a12321321321312321 2009-01-20
  • 打赏
  • 举报
回复
个人认为cookie里面存大容量的东西不好,楼主你要向cookie里面存什么?最好是想个其他的方法代替一下。
yangzhangyu832 2009-01-20
  • 打赏
  • 举报
回复
学习。。顶
MaJiaP 2009-01-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 winner2050 的回复:]
引用 3 楼 MaJiaP 的回复:
引用 2 楼 winner2050 的回复:
数据量大就根本不应该放coookie

算不上很大,一般只需要2、3个Cookie就可以了。不是上面说的80K了,那用得了这么多。用Cookie保存一些数据也是必须的,总不能都放在Session或者数据库里。


Cookie 只应该放标识的字符串而已。

浏览器每次发送请求到服务器,都会被cookie都一起带着。
[/Quote]
保存ID的话还要在查询数据了,主要还是为了避免查询数据。每次发送请求到服务器,都会被cookie都一起带着。这个没什么影响,一般保存的数据也不大,必要的时候会清空的。

再说一下Firefox3的Cookie很奇怪。用查看cookie的工具查看cookie,只要编码后的cookie长度超过4k一律查看不了,看样子老外们没有编码的烦恼。另外我的测试了一下比较准确的结果,在Firefox3中编码后的所有字符可以保存10000

另外IE7的Cookie没有限制,谁能解释一下?
winner2050 2009-01-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 MaJiaP 的回复:]
引用 2 楼 winner2050 的回复:
数据量大就根本不应该放coookie

算不上很大,一般只需要2、3个Cookie就可以了。不是上面说的80K了,那用得了这么多。用Cookie保存一些数据也是必须的,总不能都放在Session或者数据库里。
[/Quote]

Cookie 只应该放标识的字符串而已。

浏览器每次发送请求到服务器,都会被cookie都一起带着。
koukoujiayi 2009-01-20
  • 打赏
  • 举报
回复
没考虑过这个问题!!
非常好!!受教了!!
帮顶!!
jeffreyxu198203 2009-01-20
  • 打赏
  • 举报
回复
帮顶!
lonelySurvive 2009-01-20
  • 打赏
  • 举报
回复
如果是在页面想存值,和关闭不关闭浏览器没关系,也和页面间没传值,就用VIEWSTATE
需要页面间传值就用SEESSION,
COOKIE一般只用保存个用户标示,实现关闭浏览器后第2次也不用登陆登这类功能
加载更多回复(3)

62,253

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧