• IE下javascript cookie path设置Bug


    项目中设置完cookie,在Firefox下顺利测试通过。IE测试出现问题,经定位发现是Javascript设置 Cookie 时的 path 有问题。IE下Cookie设置在 /或者URL所在路径时正常,如果Cookie值作用域在当前URL下,则IE下javascript 无法获取到设置的Cookie值。 

    看下面演示代码,注意下面的path 区别:

    1. var cookie_name = "name";  
    2. var cookie_value = "value";  
    3. expires = new Date();  
    4. expires.setTime(expires.getTime() + 86400 * 1000);  
    5.   
    6. // 有Bug document.cookie无法读取到cookie_name值  
    7. document.cookie = cookie_name + "=" + encodeURIComponent(cookie_value)  
    8.         + "; expires=" + expires.toGMTString() + "; path="  
    9.         + window.location.pathname;  
    10. // 正常  
    11. document.cookie = cookie_name + "=" + encodeURIComponent(cookie_value)  
    12.         + "; expires=" + expires.toGMTString() + "; path=/test/";  
    13. // 正常  
    14. document.cookie = "cookie_name=" + encodeURIComponent(cookie_value)  
    15.         + "; expires=" + expires.toGMTString() + "; path=/";  

     

    得出结果:cookie值只对当前页面有效。现在不知道

     

    替代方案,代码:

    1. //IE Cookie Bug 替代方案  
    2. var cookie_path = window.location.pathname;  
    3. var cookie_name = encodeURIComponent(cookie_path.substring(cookie_path  
    4.         .lastIndexOf('/') + 1));  
    5. cookie_path = cookie_path.substring(0, cookie_path.lastIndexOf('/') + 1);  
    6. var cookie_value = "value";  
    7. expires = new Date();  
    8. expires.setTime(expires.getTime() + 86400 * 1000);  
    9.   
    10. document.cookie = cookie_name + "=" + encodeURIComponent(cookie_value)  
    11.         + "; expires=" + expires.toGMTString() + "; path=" + cookie_path;  

     

    替代方案根据每个页面的URL文件名来做Cookie名,有效范围在当前页路经下。
    如:url 等于 /test/test.html
    则cookie名为test.html,有效路径为/test/
    这样也可以做到同一个js部署在每个页面上能读到只对当前URL有效的cookie值。代价是当用户在同一级目录下访问很多页面时会导致cookie值不 断增大。结果是当前路径下的每个http请求都带很长一段的cookie,直接导致服务器接收客户端request的header长度增长,流量增长的同 时服务器负担也变重。而且根据 RFC 2109的定义Cookie也有长度和个数限制,IE允许的最大 Cookie 长度是 4096 字节,允许50个Cookie 名-值对。如果要突破50个名-值对的限制,可以在一个名-值使用Cookie字典的方式保存更多的Cookie变量。

      

    参考自:http://conkeyn.iteye.com/blog/423549



  • 相关阅读:
    ubuntu解压时中文出现乱码
    centos7下搭建高匿HTTP代理
    nmon监控分析
    oracle12c
    Linux下卸载Oracle 11g
    Oracle 11g修改字符集
    centos下静默安装oracle11g
    Hive基础之Hive开启查询列名及行转列显示
    Hive基础之HiveServer2 JDBC的使用
    JavaScript对象的创建总结
  • 原文地址:https://www.cnblogs.com/water-wjf/p/4277459.html
Copyright © 2020-2023  润新知