======================================================
注:本文源代码点此下载
======================================================
cookies揭秘 [asp.net, javascript]
一,前言
cookies想必所有人都了解, 但是未必所有人都精通。本文讲解了cookies的各方面知识, 并且提出来了最佳实践。这是笔者在日常工作中的积累和沉淀。
二,基础知识1.什么是cookies
cookie 是一小段文本信息,伴随着用户请求和页面在 web 服务器和浏览器之间传递。cookie 包含每次用户访问站点时 web 应用程序都可以读取的信息。
例如,如果在用户请求站点中的页面时应用程序发送给该用户的不仅仅是一个页面,还有一个包含日期和时间的 cookie,用户的浏览器在获得页面的同时还获得了该 cookie,并将它存储在用户硬盘上的某个文件夹中。
以后,如果该用户再次请求您站点中的页面,当该用户输入 url 时,浏览器便会在本地硬盘上查找与该 url 关联的 cookie。如果该 cookie 存在,浏览器便将该 cookie 与页请求一起发送到您的站点。然后,应用程序便可以确定该用户上次访问站点的日期和时间。您可以使用这些信息向用户显示一条消息,也可以检查到期日期。
cookie 与网站关联,而不是与特定的页面关联。因此,无论用户请求站点中的哪一个页面,浏览器和服务器都将交换 cookie 信息。用户访问不同站点时,各个站点都可能会向用户的浏览器发送一个 cookie;浏览器会分别存储所有 cookie。
cookie 帮助网站存储有关访问者的信息。一般来说,cookie 是一种保持 web 应用程序连续性(即执行状态管理)的方法。除短暂的实际交换信息的时间外,浏览器和 web 服务器间都是断开连接的。对于用户向 web 服务器发出的每个请求,web 服务器都会单独处理。但是在很多情况下,web 服务器在用户请求页时识别出用户会十分有用。例如,购物站点上的 web 服务器跟踪每位购物者,这样站点就可以管理购物车和其他的用户特定信息。因此,cookie 可以作为一种名片,提供相关的标识信息帮助应用程序确定如何继续执行。
使用 cookie 能够达到多种目的,所有这些目的都是为了帮助网站记住用户。例如,一个实施民意测验的站点可以简单地将 cookie 作为一个 boolean 值,用它来指示用户的浏览器是否已参与了投票,这样用户便无法进行第二次投票。要求用户登录的站点则可以通过 cookie 来记录用户已经登录,这样用户就不必每次都输入凭据。
2.cookies如何存储
cookies保存在用户的本地机器上,不同的浏览器存储在不同的文件夹中,并且按照域名分别保存。即网站之间的cookies不会彼此覆盖。
ie浏览器的用户可以通过在本地的文档中找到cookies的txt文件, 不同操作系统的位置不同,windows server 2003/xp都保存在:
c:\documents and settings\administrator\cookies 文件夹下。
其中名称txt按照域名保存,比如localhost域下的cookies为:
administrator@localhost[1].txt 或者 administrator@localhost[2].txt
其中后面的[1]和[2]是随着每次保存交替变化的。
3.cookies如何传递
cookies的信息是在web服务器和浏览器之间传递的。保存在http请求中。
(1)请求页面
在请求一个页面的http头中,会将属于此页面的本地cookies信息加在http头中,注意下面加粗的部分:
get /cookies/test.aspx http/1.1
host: localhost:1335
user-agent: mozilla/5.0 (windows; u; windows nt 5.2; zh-cn; rv:1.9.1.1) gecko/20090715 firefox/3.5.1 gtb5 (.net clr 3.5.30729)
accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
accept-language: zh-cn,zh;q=0.5
accept-encoding: gzip,deflate
accept-charset: gb2312,utf-8;q=0.7,*;q=0.7
keep-alive: 300
connection: keep-alive
cookie: my.common.testcookieinfo=pkid=999&testvalue=aaabbbcccdddeee
(2)页面响应
如果页面要求写入cookies信息,则返回的http如下,注意加粗的部分:
http/1.x 200 ok
server: asp.net development server/9.0.0.0
date: thu, 06 aug 2009 03:40:59 gmt
x-aspnet-version: 2.0.50727
set-cookie: my.common.testcookieinfo=pkid=999&testvalue=aaabbbcccdddeee; expires=fri, 07-aug-2009 03:40:59 gmt; path=/
cache-control: private
content-type: text/html; charset=utf-8
content-length: 558
connection: close
4.cookies如何查看
(1)查看cookies的txt文件
ie用户可以直接查看cookies的txt文件。
比如:c:\documents and settings\administrator\cookies\administrator@localhost[1].txt
(2)使用插件
ff下使用web developer插件可以很方便的查看、删除和修改cookies:
插件截图:
查看页面cookies:
三. cookies高级知识
1.cookie 的限制
大多数浏览器支持最大为 4096 字节的 cookie。
浏览器还限制站点可以在用户计算机上存储的 cookie 的数量。大多数浏览器只允许每个站点存储 20 个 cookie;注意这里的20个是指主键值,也就是20条cookies记录,但是每个cookies记录还可以包含若干子键,下面会详细解释。如果试图存储更多 cookie,则最旧的 cookie 便会被丢弃。有些浏览器还会对它们将接受的来自所有站点的 cookie 总数作出绝对限制,通常为 300 个。
2.cookies的存储格式
cookies可以包含一个主键, 主键再包含子键。比如asp.net中获取cookies的格式是:
request.cookies[key][subkey].tostring();
其中的key就是主键,subkey就是主键关联的子键。
(1)本地磁盘存储格式:
my.common.testcookieinfo
pkid=999&testvalue=aaabbbcccdddeee
localhost/
1536
3059603968
30021392
2348960464
30021191
*
其中的pkid=999&testvalue=aaabbbcccdddeee 是cookies的值,由于使用了subkey=subvalue的格式, 所以此cookies是包含子键的。
(2)javascript中的cookie格式
在javascript中给的cookie是一个字符串,通过document.cookies获取。字符格式如下:
my.common.subkey=pkid=999&testvalue=aaabbbcccdddeee; singlekey=singlekeyvalue
上面的字符串包含了两个cookies,一个是不包含子键的singlekey, 一个是包含pkid和textvalue两个子键的my.common.subkey,两个cookie通过“;”分割。
(3)asp.net中的cookies格式
和所有的服务器端语言一样,asp.net中使用集合类保存cookies集合:
public sealed class httpcookiecollection : nameobjectcollectionbase
{...}
通过httpresquest和httpresponse对象的cookies属性,可以获取和写入当前页面的cookies。
3.cookies的内容编码格式
cookies的值中可以保存除了“;”以外的标点符号。但是不能保存汉字。保存汉字会出现乱码。
所以对于cookies中的内容要进行统一的编码和解码。为了在浏览器端和服务器端都能够进行解码和编码, 所以要统一使用utf编码格式。
主要是因为javascript中只能使用utf编码格式。
4.cookies的path属性
cookies的path属性表示当前的cookies可以作用在网站的那个路径下。
比如下面的两个同名的cookies:
允许存在两个同名但是path不同的cookies。
无论是服务器端还是客户端,在获取时优先获取本页路径下面的cookies。
也就是说如果在、/chapter10/路径下面的页面, 获取testkey这个cookies的值,则只能获取到testvalue222222这个值。
5.cookies的过期时间
如果保存cookies时未设置过期时间, 则cookies的过期时间为“当前浏览器进程有效”,即和session一样关闭浏览器后则消失。在asp.net中还可以通过设置httpcookie对象的过期时间为datetime.minvalue来指定此cookies为跟随浏览器生效。(这句话来之不易啊,在脑袋等人的帮助下才查到的。)
如果设置了过期时间并且大于当前时间,则会保存cookies值。
如果设置了过期时间但是小于等于当前时间,则清除cookies值。
6.cookies与session
有时我们会忽略cookies与session的关系。但是两者是密不可分的。
session的唯一标示:sessionid是通常保存在cookies中的(也可以保存在url中)。对于asp.net而言,sessionid保存在键值为“asp.net_sessionid”的cookies中,如图:
因为cookies的存储数量是有限制的,所以我们的系统在保存cookies的时候一定要注意防止冲掉这一个关键的cookies。在下文介绍的最佳实践-以强对象方式保存cookies的代码中特意对这个cookies做了处理。
注意,在客户端使用javascript脚本无法获取“asp.net_sessionid”的cookies, 因为此cookies在服务器端设置了httponly属性为true。
asp.net中httpcookie对象的httponly 属性 指定一个cookie 是否可通过客户端脚本访问。不能通过客户端脚本访问为 true;否则为 false。默认值为 false。此属性并不能完全阻止客户端在本地获取cookies,但是可以增加通过脚本直接获取的难度。
microsoft internet explorer 版本 6 service pack 1 和更高版本支持 cookie 属性 httponly。
7.cookies加密
在设置cookies的属性时,有一个选项secure用来控制cookie的加密特性。
如果通过 ssl 连接 (https) 传输 cookie,则为 true;否则为 false。默认为 false。
如果我们保存一个cookies并设置加密,那么在非https的页面中,无论是使用javascript还是服务器端都无法获得此cookies。但是在本地依然可以看到此cookies的存在。
8.cookies与ajax
如果ajax请求访问一个服务器页面,此服务器页面是可以向用户浏览器写入cookies和session的。
四. cookies最佳实践
在了解了cookies的相关知识后,下面提出最佳的事件方法。其中包括客户端和服务器端两部分。
(1)asp.net 中保存cookies
通常,我们使用request和response对象来直接操作cookies:
写入cookies:
response.cookies["k1"].value = "k1value";
response.cookies["k2"]["k2-1"] = "k2-1value";
response.cookies.add(new httpcookie("k3", "k3value"));
读取cookies:
request["k1"] ;
request.cookies["k1"].value ;
request.cookies["k2"]["k2-1"];
request.cookies.get(0).value;
注意request["k1"]这个大家熟悉的获取get和post参数的方法,同时还能够获取cookies的值!
另外上面语句中的有些是必须通过value属性访问的,有些则不需要。
(2)以对象方式保存cookies
下面提供一个可以以对象方式整体保存cookies的工具类。并且只占用一条cookies,所有的属性都存在子键上。
源代码:
///
/// cookies基类。将需要保存cookies的数据类此类派生,可以将强类型对象在cookies中的保存和读取。
///
///
/// 2009.8.6ziqiu.zhangcreated
///
///
/// 假设mycookiesinfo是从 从cookies中获取对象:
///
///cookieinfo item = new cookieinfo(); //new以后已经从cookies中构造了对象。
///
/// 将对象保存在cookies中:
///
///cookieinfo item = new cookieinfo();
///item.value = "test value";
///item.setcookies("1"); //cookies有效期为1天
///
///
[system.serializable]
public class cookieinfo
{
#region ==================== constructed method ====================
///
/// 构造函数
///
public cookieinfo()
{
}
#endregion
#region ==================== public method ====================
///
/// 得到当前cookies的过期时间
///
/// 过期时间
public datetime getexpirestime()
{
string cookiename = gettype().tostring();
if (httpcontext.current.request.cookies[cookiename] != null)
{
return httpcontext.current.request.cookies[cookiename].expires;
}
return datetime.minvalue;
}
///
/// 保存cookies,过期时间为浏览器关闭则失效。
///
///
cookies过期事件
/// 是否保存成功
public bool save()
{
return this.save(datetime.minvalue);
}
///
/// 保存cookies,需要指定过期时间。
///
///
cookies过期事件
/// 是否保存成功
public bool save(datetime expirestime)
{
string cookiename = gettype().tostring();
httpcookie sessioncookie = null;
//对 sessionid 进行备份.
if (httpcontext.current.request.cookies["asp.net_sessionid"] != null)
{
string sesssionid = httpcontext.current.request.cookies["asp.net_sessionid"].value.tostring();
sessioncookie = new httpcookie("asp.net_sessionid");
sessioncookie.value = sesssionid;
}
//设定cookie 过期时间.
datetime dtexpiry = expirestime;
httpcontext.current.response.cookies[cookiename].expires = dtexpiry;
//设定cookie 域名.
string domain = string.empty;
if (httpcontext.current.request.params["http_host"] != null)
{
//domain = "www.elong.com";
domain = httpcontext.current.request.params["http_host"].tostring();
}
//如果是www.elong.com或多级域名,需要转化为elong.com
if (domain.indexof(".") > -1)
{
string[] temp = domain.split('.');
if (temp.length >= 3)
{
domain = temp[temp.length - 2].trim() + "." + temp[temp.length - 1].trim();
}
httpcontext.current.response.cookies[cookiename].domain = domain;
}
//把类的属性, 写入cookie.
propertyinfo[] propertys = gettype().getproperties();
foreach (propertyinfo pi in propertys)
{
object oj = pi.getvalue(this, null);
type type = pi.propertytype;
string valuestr = string.empty;
if (oj != null && oj.tostring() != string.empty)
{
if (type == type.gettype("system.datetime"))
{
valuestr = ((datetime)oj).tostring("yyyy/mm/dd hh:mm:ss", system.globalization.datetimeformatinfo.invariantinfo);
}
else
{
valuestr = oj.tostring();
}
httpcontext.current.response.cookies[cookiename][pi.name] = httputility.urlencode(valuestr);
}
}
//如果cookie总数超过20 个, 重写asp.net_sessionid, 以防session 丢失.
if (httpcontext.current.request.cookies.count > 20 && sessioncookie != null)
{
if (sessioncookie.value != string.empty)
{
httpcontext.current.response.cookies.remove("asp.net_sessionid");
httpcontext.current.response.cookies.add(sessioncookie);
}
}
return true;
}
///
/// 找回cookie值
///
public void load()
{
string cookievalue = string.empty;
string cookiename = gettype().tostring();
//通过遍历属性, 从cookie 中找回值, 回写到属性.
propertyinfo[] propertys = gettype().getproperties();
foreach (propertyinfo pi in propertys)
{
try
{
cookievalue = httputility.urldecode(httpcontext.current.request.cookies[cookiename][pi.name].tostring());
}
catch
{
cookievalue = string.empty;
}
if (pi.canwrite && cookievalue != null && cookievalue != string.empty)
{
try
{
object obb = cookievalue;
type type = pi.propertytype;
obb = convert.changetype(obb, type);
pi.setvalue(this, obb, null);
}
catch { }
}
}
}
#endregion
}
使用
首先说明如何使用此类。
为想要保存在cookies中的类建立模型,并且继承自cookieinfo即可。比如下面建立了mycookieinfo类,其中包含属性pkid,testvalue和testdatetime:
///
/// 保存cookies的数据对象
///
[system.serializable]
public class mycookieinfo : cookieinfo
{
private int m_pkid = 0;
public int pkid
{
get
{
return m_pkid ;
}
set
{
m_pkid = value ;
}
}
private string m_testvalue = "";
public string testvalue
{
get
{
return m_testvalue;
}
set
{
m_testvalue = value;
}
}
private datetime m_testdatetime = datetime.now;
public datetime testdatetime
{
get
{
return m_testdatetime;
}
set
{
m_testdatetime = value;
}
}
}
接下来就可以使用对象的save和load方法保存和读取cookies:
保存
save方法有两个重载,不带参数的save方法表示cookies的过期时间与浏览器相同,即浏览器关闭则cookies消失。否则需要传入cookies过期时间。
mycookieinfo testcookies = new mycookieinfo();
testcookies.pkid = 1;
testcookies.testvalue = "中文测试";
testcookies.save();
读取
mycookieinfo testcookies = new mycookieinfo();
testcookies.load();
this.lblmsg.text = "pkid:" + testcookies.pkid.tostring();
this.lblmsg.text += ",testvalue:" + testcookies.testvalue.tostring();
this.lblmsg.text += ",testdatetime:" +
testcookies.testdatetime.tostring("yyyy/mm/dd hh:mm:ss",
system.globalization.datetimeformatinfo.invariantinfo);
现在我们已经可以将一个强类型的对象读取和保存cookies了。
(3)使用javascript操作cookies
在客户端我们同样需要操作cookies。
下面是封装了的专门用于操作cookies的jquery工具函数。如果还有人不知道jquery是什么,请参考我的“从零开始学习jquery”系列教程:
http://www.cnblogs.com/zhangziqiu/archive/2009/04/30/jquery-learn-1.html
当然此工具函数稍加修改,就可以变成标准的javascript函数。
下载地址:http://files.cnblogs.com/zhangziqiu/jquery.extend-lastest.js
工具函数说明:
方法签名: jquery.cookie(name, subname, value, options)
方法说明:读取、写入、删除cookies
方法参数:
名称
说明
举例
name
cookies的主键值
读取主键:
$.cookie("singlekey")
写入cookies,值为字符串:
$.cookie("singlekey", "", "singlekey-value", { expires: 1, path: "/", secure: false })
subname
子键名称。在写入时请传递空或者null
读取子键:
$.cookie("multikey", "subname1")
写入cookies,值为对象:
var subnameobj = { subname1: "aaa", subname2: "bbb", subname3: "ccc" };
$.cookie("multikey", "", subnameobj, { expires: 1, path: "/", secure: false });
value
cookies值,可以是字符串或者对象。
如果是对象,则将对象的每个属性保存在cookies子键。
参见上面实例。
options
参数:
expires:可以是数字或者data类型的对象。
如果传入数字表示几天后过期。
path:路径,默认为域名根目录(“/”)。
secure:是否启用加密,默认为否。
指定过期时间:
var mydate = new date();
mydate.setfullyear(2009, 10, 10);
$.cookie("singlekey", "", "singlekey-value", { expires: mydate, secure: false })
1天后过期:
var time = date();
$.cookie("singlekey", "", "singlekey-value", { expires: 1, path: "/", secure: false })
五.总结
很久没有发表文章了,作为博客园改版后我的第一篇文章, 希望对大家的工作能有所帮助。 欢迎拍砖!
作者:张子秋
出处:http://www.cnblogs.com/zhangziqiu/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
标签: cookie, cookie 揭秘, javascript cookie, asp.net cookie
绿色通道:好文要顶关注我收藏该文与我联系
posted @ 2009-08-06 22:23 ziqiu.zhang 阅读(15421) 评论(65)编辑 收藏
发表评论
2197383
回复 引用 查看
#1楼 2009-08-06 22:39 microcoder
子秋好久不发文了,应该讲讲httponly cookie,asp.net的form验证产生的cookie就是httponly cookie,这种cookiejavascript是无法读取和修改的
利用firecookie观察cookie也不错哦。。。
回复 引用 查看
#2楼 2009-08-06 22:56 artech
非常不错的文章!
回复 引用 查看
#3楼 2009-08-06 22:59 jeffrey zhao
难得的好文章!
回复 引用 查看
#4楼 2009-08-06 23:06 gnie
不错!学习了!
代码好像没显示全
回复 引用 查看
#5楼 2009-08-06 23:10 szw
好文章!
可能有几处笔误:
1、如果设计了过期时间但是时间大于等于当前时间,则清除cookie(应该是小于等于吧?)
2、sessionid不是只能存在cookie中,cooike只是使用最普遍的一种媒介而已。
回复 引用 查看
#6楼[楼主] 2009-08-06 23:15 ziqiu.zhang
@szw
是笔误,应该是小于等于……多谢指点!
的确url也能传递sessionid但是用起来不是非常方便。文中没有指出,多谢这里提醒!
回复 引用
#7楼 2009-08-06 23:22 .easycode[未注册用户]
我页面上没左右滚动条 后面的文字看不到啊 ?ie 也是这样的 你们都正常?
回复 引用 查看
#8楼[楼主] 2009-08-06 23:26 ziqiu.zhang
@jeffrey zhao
老赵说好才是真的好……您这一句话,让我激动万分啊。
回复 引用 查看
#9楼[楼主] 2009-08-06 23:48 ziqiu.zhang
@gnie
@.easycode
刚换了个皮肤,现在显示应该正常了。
回复 引用 查看
#10楼 2009-08-07 00:23 shawnliu
好文 写的很全面很深刻 应该加上子域名主域名的cookie情况 以及cookie安全性
回复 引用 查看
#11楼 2009-08-07 01:39 麒麟.net
子秋兄好久不来了啊
回复 引用 查看
#12楼 2009-08-07 01:57 飞林沙
以对象来存入cookie有点重量级,我觉得多维数组刚刚好。
回复 引用
#13楼 2009-08-07 03:47 yeml[未注册用户]
你写得很认真
回复 引用 查看
#14楼 2009-08-07 08:15 侯垒
写的很好,学习了。
回复 引用
#15楼 2009-08-07 08:20 airy[未注册用户]
顶
回复 引用 查看
#16楼 2009-08-07 08:25 bing
好文章
回复 引用 查看
#17楼 2009-08-07 08:27 yjj
goodarticle!
回复 引用 查看
#18楼 2009-08-07 08:30 neverlost
基础性的文章 好
回复 引用 查看
#19楼 2009-08-07 08:32 10.06
学习了
回复 引用
#20楼 2009-08-07 08:38 niming[未注册用户]
好文,顶一个!
回复 引用 查看
#21楼 2009-08-07 08:40 ting_gt
好文章
回复 引用 查看
#22楼 2009-08-07 08:43 crayon
好文章
回复 引用 查看
#23楼[楼主] 2009-08-07 08:54 ziqiu.zhang
@飞林沙
一般的企业系统都需要这个重量级别的。 小型的网站可能不需要:)
回复 引用 查看
#24楼[楼主] 2009-08-07 08:54 ziqiu.zhang
@麒麟.net
是啊,这不是眼看周日活动,赶紧出来露露脸。
回复 引用 查看
#25楼 2009-08-07 09:01 菌哥
子秋的文章为什么这么好!
回复 引用 查看
#26楼 2009-08-07 09:01 米客一族
好文章 学习了
回复 引用 查看
#27楼 2009-08-07 09:07 webaspx
不错,学习了!
回复 引用 查看
#28楼[楼主] 2009-08-07 09:07 ziqiu.zhang
@microcoder
加到了cookies与session一节中, 正好解答了我为什么不能在js端获取sessionid的疑惑,十分感谢!
回复 引用 查看
#29楼 2009-08-07 09:36 平静中的疯狂
好文,又学习到了新东西,谢谢。cookie可以这样规范化管理
回复 引用 查看
#30楼 2009-08-07 09:58 parabola1827
总结的很好,学习了!
回复 引用 查看
#31楼 2009-08-07 10:09 莫贝特(mbetter)
不错
回复 引用 查看
#32楼 2009-08-07 10:16 凌军
一直关注楼主的文章。写的很用心...
回复 引用 查看
#33楼 2009-08-07 10:28 伊牛娃
我有个简单的问题
如果我不用cookie去存网站访客的信息
那我怎么去获取系统保存的cookie的信息?
回复 引用 查看
#34楼 2009-08-07 10:32 martin(高超)
文章写的很不错,内容丰富,用心写的文章很好。
回复 引用 查看
#35楼 2009-08-07 10:33 逍遥海盗船
顶了。
回复 引用 查看
#36楼 2009-08-07 10:48 andy.wu
的确是好文章。全面,易懂。
回复 引用 查看
#37楼 2009-08-07 11:35 子风
jquery系列 什么时候更新啊
文章不错,学习了。
回复 引用
#38楼 2009-08-07 11:40 woalang(马甲)[未注册用户]
不错,顶
回复 引用 查看
#39楼 2009-08-07 12:08 卡索
好好的文章啊!
不过针对文中提到的一般浏览器现在cookie在同一域名(比如cnblogs.com)下为20个,这个有待商榷,据知目前的浏览器除了opera为30个外,ie、ff同为50,safari/webkit好像没有数量限制的
回复 引用 查看
#40楼[楼主] 2009-08-07 13:17 ziqiu.zhang
@伊牛娃
没看懂,非敏感并且少量的信息可以保存在cookies中。否则应该保存在session中。比如只在cookies保存某些信息的主键,服务器端使用dbm等哈希表数据库快速存储的读取。
回复 引用 查看
#41楼[楼主] 2009-08-07 13:20 ziqiu.zhang
@子风
jquery目前在重写稿件中
回复 引用 查看
#42楼[楼主] 2009-08-07 13:21 ziqiu.zhang
@卡索
说的没错,这里的20是准对历史出现过的最少数量,为了浏览器的兼容性我们应该以这个最小值为准。
回复 引用 查看
#43楼 2009-08-07 14:02 莫等闲,白了少年头,空悲切。
作者下了费了很长时间
回复 引用 查看
#44楼 2009-08-07 15:44 小-g
總節的很好很全,lz挺細心費心的,呵呵
回复 引用 查看
#45楼 2009-08-07 16:29 xxx1013
总结的很好 学习了
回复 引用 查看
#46楼 2009-08-07 17:29 anytao
费心啦,费心啦。
回复 引用 查看
#47楼 2009-08-07 17:35 郑希强
顶下
回复 引用 查看
#48楼 2009-08-07 17:59 徐少侠
顶,要支持
写那么多哦
回复 引用 查看
#49楼 2009-08-07 22:02 风枫峰
支持
回复 引用 查看
#50楼 2009-08-07 22:03 人生就是赌
比较全的好文章!
两个地方需要注意:
1,cookies值不能存诸如:&yy=jj
因为cookies也是以&来分隔子键的
2,不设置cookies的expires属性,就相当于datetime.minvalue
另外不设置expires属性,cookies不会在本地有文本记录
回复 引用 查看
#51楼 2009-08-07 22:09 人生就是赌
更正错误
以上第一点我是错误的,可以存&
有&jj=0可以以子键的方式读取
回复 引用 查看
#52楼 2009-08-08 00:50 qianerhusbend
前几天刚好深入研究了这块儿, 真是好文章 ,强烈推荐并感谢楼主。
要是首页的文章 有30%像这样该多好!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
回复 引用
#53楼 2009-08-08 14:42 走行寻[未注册用户]
很好,很强大呀!
回复 引用 查看
#54楼 2009-08-11 09:17 曹赛楠
支持下~~~~~
回复 引用
#55楼 2009-08-12 13:25曹赛喃[未注册用户]
非常竞猜,谢谢自求。
回复 引用 查看
#56楼 2009-08-13 09:28 君仔
我曾经遇到一个奇怪的现象,就是我在asp.net中写入一个cookie,在asp程序中读取,没有问题,然后我在asp.net中设置该cookie过期,在asp.net中是读不到了,但是在asp中仍然能读到,不知道是怎么回事,各位有知道的吗?
回复 引用 查看
#57楼 2009-09-02 14:35 王金平
不错,讲的全面透彻
回复 引用
#58楼 2009-09-13 10:26 jamjia[未注册用户]
学习啦......
回复 引用 查看
#59楼 2009-09-16 23:09 土农民
谢谢
回复 引用
#60楼 2009-09-30 19:50 采风者[未注册用户]
很好的文章! 一直以来对session和cookies都比较迷糊!
学习了!
回复 引用
#61楼 2009-10-23 17:43 sfdsadfdsfdsfdsafdsfds[未注册用户]
如果是你写的,支持你,支持原创
回复 引用 查看
#62楼 2010-08-03 19:47 小邹
看来我落后了 ,原来cookie也这么强大.
回复 引用 查看
#63楼 2010-12-25 20:12 执手泪眼
有几个小知识点倒是对我很有作用。谢谢
回复 引用 查看
#64楼 2011-07-19 13:50 入门→精通
@sfdsadfdsfdsfdsafdsfds
不错
回复 引用 查看
#65楼 2011-09-11 23:48 _小基
呵呵,有帮助
发表评论
昵称: [登录]
主页:
邮箱:(仅博主可见)
验证码:看不清。
换一个
评论内容:
记住我的昵称和主页
-->
[使用ctrl+enter键快速提交评论]
0
1540770
hftzob6pyzo=
最新it新闻:
» 更多新闻...
最新知识库文章:
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/