`

IE对Cookie的path处理,一般是登录不成功

    博客分类:
  • c#
阅读更多

   c#mvc3在部署系统时发现一个看来很奇怪的问题,就是在google浏览器Chrome和Firefox下都运行的非常正常,但在IE内核的浏览器中总是无法登录的问题。无意间google下发现网上有很多针对IE8和IE10的cookie丢失的问题讨论,就想是不是IE8的cookie处理机制导致的,其实后来发现不是,因为打开IE的cookie管理中,勾选第三方第一方cookie就可以登录进去。因为本地运行正常并且是IE中都跑的蛮ok的,一到服务器上就出现了问题,具体的情形是我在网页中有一段类似如下的脚本引用:

  1. <script language="javascript" src="http://abc.mydomain.com/p1/check"></script>

      这段脚本就是向服务器abc.mydomain.com请求一段js,按理来说请求这段js时浏览器应该同时附带该域下的cookie到服务器上,服务器程序会解析到cookie并返回对应的信息,我出现的问题就是IE中根本就不发送cookie到服务器。而之前设置cookie的java代码类似如下:

  1. Cookie cookie = new Cookie("name", "value");
  2. cookie.setMaxAge(-1);
  3. cookie.setPath(request.getContextPath());
  4. response.addCookie(cookie);

      这段脚本看起来没有什么错误,确实是在本地测试时一切正常。其实这个最大的问题就是setPath这条语句了,因为我这里是动态获取应用程序的上下文路径作为cookie的根路径,在本地测试时由于都有contentpath,所以不会有什么问题。但一旦部署到服务器后由于是独立域名部署根contextpath,所以取到的contextpath是空串,可惜的是IE对如下的cookie路径设置和chrome和firefox是完全不一样的:

  1. cookie.setPath("");

      实践证明IE会忽略这个path,而chrome和firefox则会认为是设置了。因为根据cookie规范,如果设置了path,那么只有当访问路径中包含了这个path的url时才会发送cookie到服务器;如果没有设置path,那么只有当访问和设置cookie同样的路径时才会发送cookie到服务器。可惜的是这里IE忽略了,因此会按照后面的来处理cookie,而chrome和firefox则会认为设置了path,那么理所当然的任何访问路径都会携带cookie,这也就导致了我前面所说的情况了。

 

附:cookie的一些小知识:

1、Cookie存放的目录

Cookie是存放在客户端的东东,放在“TemporaryInternetFiles”目录,所以说存在安全性的问题。大伙可通过以下方式找到具体位置:打开控制面板→Internet选项→常规→Internet临时文件→设置→即可看到“当前位置”,→点击“查看文件”将直接打开该文件夹,你也可以点击“移动文件夹”变更它所在的位置。

2、Cookie的有效期

从上图我们可以清楚的看到每个Cookie文档的“截止期”(即为有效期)。在有效期内,当登录计算机的用户Administrator再次访问172.meibu.com时,那么IE就会在请求页面的同时,连同上述的名称为“Cookie:administrator@172.meibu.com”的Cookie文档内容一起发送给服务器。

若该文档包含多个Cookie的值时,截止期则以最后的失效期为准。

3、Cookie的类型

这里我们按有效期来分,分为两种:

a)即时型

指的是关闭浏览器(所有浏览172.meibu.com的IE)后,Cookie便失效,此类Cookie不会在“TemporaryInternetFiles”目录出现。其实它也有截止期的,为“0001-01-01”

b)持久型

就是已指定具体“截止期”的,能够在“TemporaryInternetFiles”目录里面找到的Cookie

4、Cookie的内容

双击打开“Cookie:administrator@172.meibu.com”,我们看到以下内容,如下图(http://blog.csdn.net/images/blog_csdn_net/cityhunter172/85935/r_aspxForm06.jpg):

上图中,“■”是换行符,你若是要打破什么锅来问我到底是怎么知道的话。我倒是会很乐意的告诉你:这就是经验!偶从学习C#那刻起,就拿第一个Windows程序——记事本来开刀,保存文档时得来的经验。

所以服务器读出来的格式如下图(http://blog.csdn.net/images/blog_csdn_net/cityhunter172/85935/r_aspxForm07.jpg):

5、在ASP.NET页面发放Cookie

发送上述Cookie的.cs代码为:

System.Web.HttpCookie ck=new HttpCookie("ckValue0");

ck["Author"]="CityHunter";

ck.Expires=System.DateTime.Now.AddMinutes(10);//若不指定,则为即时型Cookie

//ck.Path="/FormTest/ManageSys";//设置Cookie的虚拟路径,注意一定要以“/”开头,否则为无效Cookie;请大家自行看一下它与在客房端的Cookie文档“名称”与“Internet地址”的关系

Response.Cookies.Add(ck);

ck=newHttpCookie("ckValue1");//重新新建一个名为ckValue1的Cookie

ck.Expires=System.DateTime.Now.AddMinutes(20);//即刻起20分钟后失效

ck["E_Mail"]="mailto:cityhunter172@126.com%22;//设置ckValue1中的E_Mail值

ck["PersonalWeb"]="172.meibu.com";

Response.Cookies.Add(ck);//添加此Cookie

6、取回已发放Cookie的值

Response.Write(Request.Cookies["ckValue0"]["Author"]+"<br>");//用不着说明了吧

Response.Write(Request.Cookies["ckValue1"]["E_Mail"]+"<br>");

Response.Write(Request.Cookies["ckValue1"]["PersonalWeb"]);

1
4
分享到:
评论
2 楼 shuaigelingfei 2014-06-26  
TemplarAssassin 写道
解决方案是什么?

在IE要把cookie的路径设置就解决了
1 楼 TemplarAssassin 2014-06-05  
解决方案是什么?

相关推荐

    PHP100视频教程 32:PHP5中Cookie与 Session详解

     (2)、不同的浏览器对Cookie的处理不一致,且有时会出现错误的结果。 (3)、限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。3、...

    cookie中的path与domain属性详解

    1.domain表示的是cookie所在的域,默认为请求的地址,如网址为www.jb51.net/test/test.aspx,那么domain默认为...2.path表示cookie所在的目录,asp.net默认为/,就是根目录。在同一个服务器上有目录如下:/te

    PHP100视频教程 (三十二、PHP5中Cookie与 Session详解)

    (2)、不同的浏览器对Cookie的处理不一致,且有时会出现错误的结果。 (3)、限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。 3、...

    PHP100视频教程 32:PHP5中Cookie与 Session详解.rar

     (2)、不同的浏览器对Cookie的处理不一致,且有时会出现错误的结果。  (3)、限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。 3...

    浅析Cookie中的Path与domain

    Path – 路径。指定与cookie关联的WEB页。 值可以是一个目录,或者是一个路径。 如果//www.jb51.net/test/index.html 建立了一个cookie,那么在//www.jb51.net/test/目录里的所有页面,以及该目录下面任何子目录里的...

    js设置cookie过期及清除浏览器对应名称的cookie

    代码如下: function ClearCookie() { var expires = new Date(); expires.setTime... //expires是对应过期时间的设置,不设这个值,cookie默认在关闭浏览器时失效 [removed] = “roleID=’333”’;path=/;expires=”

    python处理cookie详解

    domain=baidu.comexpires是cookie的生存周期,path是cookie的有效路径,domain是cookie的有效域. 路径”path”用于设置可以读取一个cookie的最顶层的目录. 将cookie的路径设置为你的网页最顶层的目录可以让该该目录...

    用header 发送cookie的php代码

    用header 发送cookie header(“Set-Cookie: testcookie=中文; path=/; domain=.phpv.net; expires=”.gmstrftime(“%A, %d-%b-%Y %H:%M:%S GMT”,time()+9600)); 请将path=/; domain=.phpv.net;改为自己...

    python使用cookie库操保存cookie详解

    expires是cookie的生存周期,path是cookie的有效路径,domain是cookie的有效域. 路径”path”用于设置可以读取一个cookie的最顶层的目录.将cookie的路径设置为你的网页最顶层的目录可以让该该目录下的所

    javascript设置和获取cookie的方法实例详解

    function setCookie(cookieName,cookieValue,cookieExpires,cookiePath) { cookieValue = escape(cookieValue);//编码latin-1 if(cookieExpires=="") { var nowDate = new Date(); nowDate.setMonth(nowDate....

    httpclient模拟登陆具体实现(使用js设置cookie)

    httpclient模拟登陆(使用js设置cookie) 代码如下: &lt;html&gt; &lt;meta http-equiv=’Content-Type’ content=’text/html; charset=gb2312′&gt; &lt;link rel=stylesheet type=text/css href=’/bbs.css’&gt; ...

    jquery 删除cookie失效的解决方法

    最近做一个功能, 但是删除cookie的时候总是失效, 搞不清楚什么原因. 使用$.cookie(“name”,””); 结果出来是生成了一个新的空值的cookie. 使用$.cookie(“name”,null); 又删除不掉cookie. 最后使用$.cookie(...

    JS中对Cookie的操作详解

    path 可选,服务器端有效路径,/ 表示整个域名有效,默认为当前设置 cookie 时页面的路径 domain 可选,该 cookie 有效的域名 secure 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。 代码的封装 (function...

    php setcookie(name, value, expires, path, domain, secure) 参数详解

    setcookie() 定义一个和其余的 HTTP 标头一起发送的 cookie。和其它标头一样,cookie 必须...这并不说明用户是否接受了 cookie。函数定义:bool setcookie ( string name [, string value [, int expire [, string path

    Python使用cookielib模块操作cookie的实例教程

    cookielib是一个自动处理cookies的模块,如果我们在使用爬虫等技术的时候需要保存cookie,那么cookielib会让你事半功倍!他最常见的搭档模块就是python下的urllib和request。 核心类 1.Cookie 该类实现了Netscape ...

    关于jsp中cookie丢失问题(详解)

    jsp中设置cookie如果不设置路径,会出现cookie丢失问题 Cookie cookie = new Cookie(cookieName, value); cookie.setMaxAge(3600); cookie.setPath(/); response.addCookie(cookie); 以上这篇关于jsp中cookie丢失...

    javascript实现设置、获取和删除Cookie的方法

    本文实例讲述了javascript实现设置、获取和删除Cookie的方法。分享给大家供大家参考。具体实现方法如下: /* *设置Cookie * * name:cookie所对应的键 * value:cookie所对应的值 ... //cookie键值对 var str = nam

    jQuery cookie的公共方法封装和使用示例

    本文实例讲述了jQuery cookie的公共方法封装和使用。分享给大家供大家参考,具体如下: common.js放入公共方法: /** * 刷新cookie ... $.cookie(_key, _value, {path: cookiesPath, expires: cook

    Cookie localStorage sessionStorage区别和使用

    Cookie Cookie是什么:指某些网站存储...设置cookie:直接对[removed]赋值(key不同不会覆盖) 通过 path 参数,您可以告诉浏览器 cookie 属于什么路径。默认情况下,cookie 属于当前页 [removed] = “username=Bill G

    jQuery使用cookie与json简单实现购物车功能

    本文实例讲述了jQuery使用cookie与json简单实现购物车的方法。分享给大家供大家参考,具体如下:...$.cookie("cart","ids",{expires:-7,path:"/"}) //存储cookie 保存7天 if($.cookie("cart")==undefined){//不存在用un

Global site tag (gtag.js) - Google Analytics