关于cookie在多个网页间的可见性!!!

xdd1125 2005-02-19 02:23:06
以前对内存cookie是这样理解的:
1.cookie属于特定的网页,即,不同的网页中的cookie不同
2.在网页中转到新位置时,cookie会传入下一个网页中
3.modal窗体中的cookie不能传入新打开的网页

今天又发现了一个新的现象:一个web应用的cookie却被另一个web应用用alert(document.cookie)读出来了,但有时却又看不到。


看来我对cookie的认识还差很远,请各位指导一二!
谢谢
...全文
365 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
aimyray 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 web_gus 的回复:]
获取客户端发送的 cookie 的集合。

[C#]
public HttpCookieCollection Cookies {get;}


[C#]
int loop1, loop2;
HttpCookieCollection MyCookieColl;
HttpCookie MyCookie;

MyCookieColl =……
[/Quote]

对我有用@!
xdd1125 2005-02-24
  • 打赏
  • 举报
回复
还有吗?
xdd1125 2005-02-23
  • 打赏
  • 举报
回复
to morality(业精于勤,行成于思!)

多谢您的参与。还有一些疑问:
1.内存cookie应是不过期的
2.内存cookie不保留在硬 盘上,有domain和path的限制,应该是安全的
3.能不能介绍一下cookieless的asp.net的应用情况


谢谢!
lvzhizhu 2005-02-22
  • 打赏
  • 举报
回复
up
web_gus 2005-02-22
  • 打赏
  • 举报
回复
获取客户端发送的 cookie 的集合。

[C#]
public HttpCookieCollection Cookies {get;}



[C#]
int loop1, loop2;
HttpCookieCollection MyCookieColl;
HttpCookie MyCookie;

MyCookieColl = Request.Cookies;

// Capture all cookie names into a string array.
String[] arr1 = MyCookieColl.AllKeys;

// Grab individual cookie objects by cookie name.
for (loop1 = 0; loop1 < arr1.Length; loop1++)
{
MyCookie = MyCookieColl[arr1[loop1]];
Response.Write("Cookie: " + MyCookie.Name + "<br>");
Response.Write("Expires: " + MyCookie.Expires + "<br>");
Response.Write ("Secure:" + MyCookie.Secure + "<br>");

//Grab all values for single cookie into an object array.
String[] arr2 = MyCookie.Values.AllKeys;

//Loop through cookie Value collection and print all values.
for (loop2 = 0; loop2 < arr2.Length; loop2++)
{
Response.Write("Value" + loop2 + ": " + Server.HtmlEncode(arr2[loop2]) + "<br>");
}
}
morality 2005-02-22
  • 打赏
  • 举报
回复
ASP.NET中Cookie编程简明参考

一 写入Cookie

  1. Name 和 Value 属性由程序设定,默认值都是空引用。

  2. Domain属性的默认值为当前URL的域名部分,不管发出这个cookie的页面在哪个目录下的。

  例如,http://www.kent.com/application1/login.aspx 页面中发出一个cookie,Domain属性缺省就是www.kent.com ,可以由程序设置此属性为需要的值。

  3. Path属性的默认值是根目录,即 ”/” ,不管发出这个cookie的页面在哪个目录下的。可以由程序设置为一定的路径来进一步限制此cookie的作用范围。

  4. Expires 属性,这个属性设置此Cookie 的过期日期和时间。如果没有设置 Cookie 的有效期(默认设置),也可以创建 Cookie,但它不会保存到用户的硬盘上,而是会成为用户会话信息的一部分,关闭浏览器或会话超时这个Cookie即会消失,这种Cookie称作非永久性的 Cookie。存放SessionID的Cookie就是这样的一种Cookie,它不存放在硬盘上,只存在内存之中。

  5. 将要发出的Cookie附加到Response的Cookies属性中就可以将此Cookie发送到客户端:Reponse.Cookies.Add(Cookie)

  6. Domain属性+Path属性 相同的所有Cookie 在客户端都存在一个文件中,Cookie之间以”*”分割。每个Cookie的第一行是 Cookie 的名称,第二行是值,第三行是Domain属性+Path属性组成的一个字符串,指示此Cookie的作用域,其余各行则包含 Cookie 的日常处理信息,例如过期日期和时间。Cookie 中还有一个简单的校验和,如果更改 Cookie 名称或值的长度,浏览器就会检测到修改并删除该 Cookie。

  二 读取Cookie

  1. Request.Cookies 属性中包含了客户端发送到服务器的所有Cookie的集合,只有在请求URL的作用范围内的Cookie才会被浏览器连同Http请求一起发送到服务器。

  2. Name 和 Value 属性和子键的值很容易读到。

  3. Domain 和 Path 属性 是读不到的,读Domain属性永远是””,读Path属性永远是 ”/” 。本来这些属性的用途很有限。如果您的页面与 Cookie 不在相同的域,您根本就不会在页面的位置接收到该 Cookie。

  4. 也无法读取Cookie 的过期日期和时间。事实上,当浏览器向服务器发送 Cookie 信息时,浏览器并未将过期信息包括在内。您可以读取 Expires 属性,但总是返回为零的日期/时间值。Expires 属性的主要作用是帮助浏览器执行有关 Cookie 保存的日常管理。从服务器的角度来看,Cookie 要么存在要么不存在,所以对服务器而言,有效期并不是有用的信息。
所以,浏览器在发送 Cookie 时并不提供此信息。如果您需要 Cookie 的过期日期,就必须重新设置。

  三 修改和删除 Cookie

  1. 其实你不能直接修改一个Cookie,是创建一个同名的 Cookie,并把该 Cookie 发送到浏览器,覆盖客户机上旧的 Cookie。

  2. 同样您无法直接将其删除一个Cookie,可以通过修改一个Cookie达到让浏览器帮你删除Cookie的目的,修改Cookie的有效期为过去的某个时间,当浏览器检查 Cookie 的有效期时,就会删除这个已过期的 Cookie。

  四 Cookie同Session的关系

  1. asp.net中Session可以采用cookie 和cookieless两种方法,cookieless方式是将SessionID放在URL中在客户端和服务端中来回传递,不需要用到cookie,在这里不讨论这个方式。

  2. 在asp.net中客户第一次请求一个URL,服务器给这个客户生成一个SessionID,并以非永久性的 Cookie发送到客户端。

  3. 非永久性的 Cookie只有在浏览器关闭后这些Cookie才随之消失,Session的超时判断是这样的过程:

  3.1 第一次客户端访问服务器,会得到一个SessionID,以非永久性的 Cookie发送到客户端。

  3.2 在这个浏览器关闭之前访问这个URL,浏览器都会把这个SessionID发送到服务端,服务端根据SessionID来维持对应此客户的服务端的各种状态(就是Session中保存的各种值),在web应用程序中可以对这些Session进行操作。

  3.3 服务端维护此SessionID的过期时间,IIS中可以设置Session的超时时间。每次请求都将导致服务端将此SessioID的过期时间延长一个设置的超时时间。

  3.4 当服务端发现某个SessionID已经过时,即某个客户已经在设置的超时时间内没有再次访问此站点,即将此SessionID,连同跟此SessionID相关的所有Session变量删除。

  3.5 客户端的浏览器未关闭前,并不知道服务端已经将这个SessionID删除,客户端依旧发送此SessionID的cookie到服务端,只是此时的服务端已经不认识此SessionID了,会将此用户当做新用户,再次分配一个新的SessionID。

yizhixiaozhu 2005-02-22
  • 打赏
  • 举报
回复
up
xdd1125 2005-02-22
  • 打赏
  • 举报
回复
还有吗?
Jack2013tong 2005-02-19
  • 打赏
  • 举报
回复
UP
majinsong 2005-02-19
  • 打赏
  • 举报
回复
up
liulxmooo 2005-02-19
  • 打赏
  • 举报
回复
up
yizhixiaozhu 2005-02-19
  • 打赏
  • 举报
回复
帮你顶
LoveCherry 2005-02-19
  • 打赏
  • 举报
回复
关于Asp.net应用中cookie的问题处理:



1、在应用程序中有时会出现cookie混乱的问题,主要问题在RemoveCookie上,解决办法:



/// <summary>

/// 移除cookie,将Request和Response两个集合中的都清理

/// Code by KentLi

/// </summary>

/// <param name="cookieName">cookie名称</param>

public void RemoveCookie(string cookieName)

{



HttpCookie Cookie = HttpContext.Current.Request.Cookies[cookieName];

if (Cookie != null)

{
//过期时间设置为立即过期

Cookie.Expires= DateTime.Now;

HttpContext.Current.Request.Cookies.Remove(cookieName);

}



Cookie = HttpContext.Current.Response.Cookies[cookieName];

if (Cookie != null)

{



Cookie.Expires= DateTime.Now;

HttpContext.Current.Response.Cookies.Remove(cookieName);

}

}



public void appendcook(string cookies,string cookiesvalue,int days)

{

HttpCookie usercookie=new HttpCookie(cookies,cookiesvalue);

usercookie.Expires = DateTime.Now.AddDays(days);

HttpContext.Current.Response.Cookies.Add(usercookie);

}




2、中文cookie的问题,在Windows 2000正常,在Windows 2003有时会不正常(几率很小,但的确存在),采用:

Server.UrlEncode();

Server.UrlDecode();

编码和解码。



Cookie["MyCookie"] = Server.UrlEncode("中文")


Response.Write(Server.UrlDecode(Request.Cookies("MyCookie").Value()))

http://support.microsoft.com/default.aspx?scid=kb;en-us;313282



更多Cookie的相关知识




HttpContext.Current.Response.Cookies

HttpContext.Current.Request.Cookies



分别是需要写回用户客户端和从用户客户端读取的Cookie集合。


当修改Cookie的时候,为了保证同一个Asp.net 页面能访问修改后的Cookie,就必须同时修改这两个集合中的Cookie。




http://blog.joycode.com/ghj/archive/2003/11/06/5647.aspx


http://west-wind.com/weblog/posts/1006.aspx

http://www.derkeiler.com/Newsgroups/microsoft.public.inetserver.iis.security/2004-03/0147.html
jialiang 2005-02-19
  • 打赏
  • 举报
回复
up
xdd1125 2005-02-19
  • 打赏
  • 举报
回复
up

62,075

社区成员

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

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

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

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