对于cookie,我们一般认为有这样的特性:
设置了cookie的值而不设置有效期时,页面存在期间都是有效的,包括从本页面新打开的页面中均可以使用(同一个服务器),一旦页面关闭,cookie自动清除。实践过程中,我发现,如果直接用IE浏览器打开页面(用户大多直接使用IE浏览器),上述推论成立,但用户如果不直接使用IE浏览器,而是使用"我的电脑"或者"资源管理器",在地址栏里面输入网址,此时,cookie的这些特性失灵了,为此,我们做如下实验:
打开VS2008,新建一个网站,默认已经有一个网页了,名称为default.aspx,我们再添加一个webform,使用默认的名称:default2.aspx
在页面1上,添加一个超级链接,两个html按钮,分别用于打开新页面(也就是default2.aspx)、显示cookie、设置cookie,写cookie的函数如下:
function WriteCookie (key, value, cookieDomain, cookiePath, expireTime, targetWindow)
{
value = '' + value;
var strAppendix = "";
strAppendix += cookieDomain ? ";domain=" + cookieDomain : "";
strAppendix += cookiePath ? ";path=" + cookiePath : "";
strAppendix += expireTime ? ";expires=" + expireTime : "";
targetWindow = targetWindow ? targetWindow : top;
document.cookie = escape(key) + "=" + escape(value) + strAppendix;
}超级链接为:<a href="Default2.aspx" target="_blank" id="lkPage2">link to new page </a> 注意,在新窗口中打开,也就是target="_blank"
按钮1显示cookie:
function btnShowCookie_onclick()
{
alert(document.cookie);
}
按钮2设置cookie:
function btnSetCookie_onclick()
{
WriteCookie("test", "testvalue");
}页面2的功能很简单,在页面载入时,显示一下cookie就可以了:
window.onload = function()
{
alert(document.cookie);
} 准备完毕,我们运行网站,默认会用IE启动default.aspx,在地址栏里面复制web地址到剪贴板,然后把所有窗口都最小化,开始测试测试一:
从桌面上打开IE浏览器,粘贴好地址,并回车,显示出default.aspx,点超级链接或点按钮1,都显示没有cookie,点一下按钮2进行cookie设置,再点超级链接或按钮1,显示cookie正常了.
关闭IE,再重新打开一个IE,同样设置好地址,点一下按钮1,显示没有cookie,说明cookie在刚才关闭浏览器时,的确清空了.
从上面的测试中发现,一切都和书上介绍的一样.测试2:
打开"我的电脑"(不是IE图标!),在地址栏里面粘贴好地址并回车,将打开"default.aspx",同样,点超级连接或按钮1,均无cookie,这是意料之中的.
点按钮2来设置cookie,然后点按钮1,cookie显示出来了,说明设置成功,再点超级链接,提示无cookie说明cookie没有传递给新页面!
关闭该浏览器(就是我的电脑),重新打开一个"我的电脑",在地址栏里面粘贴好地址并回车,default.aspx显示出来后,点一下按钮1,发现cookie还在,说明cookie并没有被清空,同样,点超级链接,新页面当然也没有cookie,换句话说,通过"我的电脑"打开页面后,cookie不会传到新页面,关闭时也不会清空!我的个人分析(不一定正确):"我的电脑"是windows图形界面的一部分,"IE"是另外一个软件(资源浏览器的可执行文件为:windows\explorer.exe,而IE的执行文件为:Program Files\Internet Explorer\iexplore.exe),是两个软件,因此,当我们点超级链接时,"我的电脑"打开一个新的IE窗口,并在其中显示新页面,因为是两个软件(主页面是我的电脑,新页面是IE),因此cookie无法共享,关闭"我的电脑"时,因为整个图形界面并没有关闭(除非重新启动计算机),因此,cookie不会清空.//======================================================================================
现在我的问题时,如何让用户使用"我的电脑"打开页面后,效果与直接用IE打开的效果一样?
//======================================================================================大家可以到http://61.153.65.30/testcookie/进行测试,就两个页面,查看源代码就可以复制下来在本地测试了.
设置了cookie的值而不设置有效期时,页面存在期间都是有效的,包括从本页面新打开的页面中均可以使用(同一个服务器),一旦页面关闭,cookie自动清除。实践过程中,我发现,如果直接用IE浏览器打开页面(用户大多直接使用IE浏览器),上述推论成立,但用户如果不直接使用IE浏览器,而是使用"我的电脑"或者"资源管理器",在地址栏里面输入网址,此时,cookie的这些特性失灵了,为此,我们做如下实验:
打开VS2008,新建一个网站,默认已经有一个网页了,名称为default.aspx,我们再添加一个webform,使用默认的名称:default2.aspx
在页面1上,添加一个超级链接,两个html按钮,分别用于打开新页面(也就是default2.aspx)、显示cookie、设置cookie,写cookie的函数如下:
function WriteCookie (key, value, cookieDomain, cookiePath, expireTime, targetWindow)
{
value = '' + value;
var strAppendix = "";
strAppendix += cookieDomain ? ";domain=" + cookieDomain : "";
strAppendix += cookiePath ? ";path=" + cookiePath : "";
strAppendix += expireTime ? ";expires=" + expireTime : "";
targetWindow = targetWindow ? targetWindow : top;
document.cookie = escape(key) + "=" + escape(value) + strAppendix;
}超级链接为:<a href="Default2.aspx" target="_blank" id="lkPage2">link to new page </a> 注意,在新窗口中打开,也就是target="_blank"
按钮1显示cookie:
function btnShowCookie_onclick()
{
alert(document.cookie);
}
按钮2设置cookie:
function btnSetCookie_onclick()
{
WriteCookie("test", "testvalue");
}页面2的功能很简单,在页面载入时,显示一下cookie就可以了:
window.onload = function()
{
alert(document.cookie);
} 准备完毕,我们运行网站,默认会用IE启动default.aspx,在地址栏里面复制web地址到剪贴板,然后把所有窗口都最小化,开始测试测试一:
从桌面上打开IE浏览器,粘贴好地址,并回车,显示出default.aspx,点超级链接或点按钮1,都显示没有cookie,点一下按钮2进行cookie设置,再点超级链接或按钮1,显示cookie正常了.
关闭IE,再重新打开一个IE,同样设置好地址,点一下按钮1,显示没有cookie,说明cookie在刚才关闭浏览器时,的确清空了.
从上面的测试中发现,一切都和书上介绍的一样.测试2:
打开"我的电脑"(不是IE图标!),在地址栏里面粘贴好地址并回车,将打开"default.aspx",同样,点超级连接或按钮1,均无cookie,这是意料之中的.
点按钮2来设置cookie,然后点按钮1,cookie显示出来了,说明设置成功,再点超级链接,提示无cookie说明cookie没有传递给新页面!
关闭该浏览器(就是我的电脑),重新打开一个"我的电脑",在地址栏里面粘贴好地址并回车,default.aspx显示出来后,点一下按钮1,发现cookie还在,说明cookie并没有被清空,同样,点超级链接,新页面当然也没有cookie,换句话说,通过"我的电脑"打开页面后,cookie不会传到新页面,关闭时也不会清空!我的个人分析(不一定正确):"我的电脑"是windows图形界面的一部分,"IE"是另外一个软件(资源浏览器的可执行文件为:windows\explorer.exe,而IE的执行文件为:Program Files\Internet Explorer\iexplore.exe),是两个软件,因此,当我们点超级链接时,"我的电脑"打开一个新的IE窗口,并在其中显示新页面,因为是两个软件(主页面是我的电脑,新页面是IE),因此cookie无法共享,关闭"我的电脑"时,因为整个图形界面并没有关闭(除非重新启动计算机),因此,cookie不会清空.//======================================================================================
现在我的问题时,如何让用户使用"我的电脑"打开页面后,效果与直接用IE打开的效果一样?
//======================================================================================大家可以到http://61.153.65.30/testcookie/进行测试,就两个页面,查看源代码就可以复制下来在本地测试了.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货