`
Harold_xlp
  • 浏览: 154634 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JS跨域设置和取Cookie

 
阅读更多
<!-- 导航 开始-->

 

cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。本文主要JS怎样读取Cookie以及域的设置。

AD: <script src="http://www.51cto.com/js/article/keywords_ad_new.js"></script>

 

Javascript脚本里,一个cookie 实际就是一个字符串属性。当你读取cookie的值时,就得到一个字符串,里面当前WEB页使用的所有cookies的名称和值。每个cookie除了 name名称和value值这两个属性以外,还有四个属性。这些属性是: expires过期时间、 path路径、 domain域、以及 secure安全。

Expires – 过期时间。指定cookie的生命期。具体是值是过期日期。如果想让cookie的存在期限超过当前浏览器会话时间,就必须使用这个属性。当过了到期日期时,浏览器就可以删除cookie文件,没有任何影响。

Path – 路径。指定与cookie关联的WEB页。值可以是一个目录,或者是一个路径。如http://www.zdnet.com/devhead /index.html 建立了一个cookie,那么在http://www.zdnet.com/devhead/目录里的所有页面,以及该目录下面任何子目录里的页面都可以 访问这个cookie。这就是说,在http://www.zdnet.com/devhead/stories/articles 里的任何页面都可以访问http://www.zdnet.com/devhead/index.html建立的cookie。但是,如果http: //www.zdnet.com/zdnn/ 需要访问http://www.zdnet.com/devhead/index.html设置的cookes,该怎么办?这时,我们要把cookies 的path属性设置成“/”。

在指定路径的时候,凡是来自同一服务器,URL里有相同路径的所有WEB页面都可以共享cookies。现在看另一个例子: 如果想让 http://www.zdnet.com/devhead/filters/ 和http://www.zdnet.com/devhead/stories/共享cookies,就要把path设成“/devhead”。

Domain – 域。指定关联的WEB服务器或域。值是域名,比如zdnet.com。这是对path路径属性的一个延伸。如果我们想让 catalog.mycompany.com 能够访问shoppingcart.mycompany.com设置的cookies,该怎么办? 我们可以把domain属性设置成“mycompany.com”,并把path属性设置成“/”。不能把cookies域属性设置成与设置它的服务器的 所在域不同的值。

Secure – 安全。指定cookie的值通过网络如何在用户和WEB服务器之间传递。这个属性的值或者是“secure”,或者为空。缺省情况下,该属性为空,也就是 使用不安全的HTTP连接传递数据。如果一个 cookie 标记为secure,那么,它与WEB服务器之间就通过HTTPS或者其它安全协议传递数据。不过,设置了secure属性不代表其他人不能看到你机器本 地保存的cookie。换句话说,把cookie设置为secure,只保证cookie与WEB服务器之间的数据传输过程加密,而保存在本地的 cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。

例:a.b.com和c.b.com两个站,建立方式如下:

a.b.com站下建a.html。关键代码如下:

 

  1. <script type="text/javascript">  
  2. function setCookie(c_name,value,expiredays) {  
  3. var exdate=new Date();  
  4. exdate.setDate(exdate.getDate()+expiredays);  
  5. alert(exdate.getDate()+expiredays);  
  6. document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString())+";path=/;domain=b.com";  
  7. }  
  8. window.onload=function(){  
  9. setCookie("listallwjh","sfwjh");  
  10. alert("Cookie设置成功!");  
  11. }  
  12. </script> 

 

c.b.com站下建a.html。关键代码如下

 

  1. <script>  
  2. function getCookie(c_name) {  
  3. if (document.cookie.length>0)  
  4. {  
  5. c_start=document.cookie.indexOf(c_name + "=");  
  6. if (c_start!=-1)  
  7. {   
  8. c_start=c_start + c_name.length+1 ;  
  9. c_end=document.cookie.indexOf(";",c_start);  
  10. if (c_end==-1) c_end=document.cookie.length;  
  11. return unescape(document.cookie.substring(c_start,c_end));  
  12. }   
  13. }  
  14. return "";  
  15. }  
  16. window.onload=function(){  
  17. var c_name="listallwjh";  
  18. if(getCookie("listallwjh")!=null){  
  19. alert(getCookie("listallwjh"));  
  20. }  
  21. }  
  22. </script> 

 

这两个一个也面是设置,一个是取,只要保证两个规则一样,就行。运行,结果:OK!

注:这两个方法有时候也可以写在一起,先判断cookie是否存在,在创建。

友情资料:

一、浏览器允许每个域名所包含的 cookie 数:Microsoft 指出 Internet Explorer 8 增加 cookie 限制为每个域名 50 个,但 IE7 似乎也允许每个域名 50 个 cookie( color="#006da3">《Update to Internet Explorer&rsquo;s Cookie Jar》)。

Firefox 每个域名 cookie 限制为 50 个。Opera 每个域名 cookie 限制为 30 个。Safari/WebKit 貌似没有 cookie 限制。但是如果 cookie 很多,则会使 header 大小超过服务器的处理的限制,会导致错误发生。注:每个域名 cookie 限制为 20 个将不再正确!

二、当很多的 cookie 被设置,浏览器如何去响应。除 (可以设置全部cookie,不管数量多少),有两个方法:最少最近使用(least recently used (LRU))的方法:当 Cookie 已达到限额,自动踢除最老的 Cookie ,以使给最新的 Cookie 一些空间。 Internet Explorer 和 Opera 使用此方法。

Firefox 很独特:虽然最后的设置的 Cookie 始终保留,但似乎随机决定哪些 cookie 被保留。似乎没有任何计划(建议:在 Firefox 中不要超过 Cookie 限制)。

三、不同浏览器间 cookie 总大小也不同:Firefox 和 Safari 允许 cookie 多达 4097 个字节, 包括名(name)、值(value)和等号。Opera 允许 cookie 多达 4096 个字节, 包括:名(name)、值(value)和等号。Internet Explorer 允许 cookie 多达 4095 个字节, 包括:名(name)、值(value)和等号。注:多字节字符计算为两个字节。在所有浏览器中,任何 cookie 大小超过限制都被忽略,且永远不会被设置。

当访问者首次访问页面时,他或她也许会填写他/她们的名字。名字会存储于 cookie 中。当访问者再次访问网站时,他们会收到类似 "Welcome John Doe!" 的欢迎词。而名字则是从 cookie 中取回的。这就是Cookie,希望本文能帮助到你。

分享到:
评论

相关推荐

    js跨域访问解决方案总结

    js跨域访问解决方案总结,不同域名下cookie相互操作

    cookie设置插件jquery.cookie.min.js

    cookie设置插件jquery.cookie.min.js 文章《javascript设置cookie高级篇可跨域访问》https://blog.csdn.net/cplvfx/article/details/117822956

    能跨域和跨浏览器的flashcookie for jquery插件

    跨域只需要把 js代码里的 swf_url 地址设置成绝对地址就可以了。 比如 swf_url=http://www.a.com/storage.swf ,那么在b.com上面就能对a站的flashcookie进行读写了。 因为他的storage.swf文件默认可以跨域、如果...

    Vue axios 跨域请求无法带上cookie的解决

    在main.js设置 // 携带cookie axios.defaults.withCredentials = true 补充知识:VUE axios请求跨域时没有带上cookie或者每次cookie都改变 ...后端也配置了跨域cookie,然后就是没用,每次后台获取到的ses

    Ajax跨域请求COOKIE无法带上的完美解决办法

    1、原生ajax请求方式: ... //支持跨域发送cookies 4 xhr.send(); 2、jquery的ajax的post方法请求: $.ajax({ type: "POST", url: "http://xxx.com/api/test", dataType: 'json',  // 允许携带证书

    基于C#后台调用跨域MVC服务及带Cookie验证的实现

    背景随着富客户端框架的盛行,以及众多优秀的前端js框架,很多情况我们会遇到跨域的问题,而js的ajax请求是不允许直接跨域访问的,当然你会说可以用JSONP等,但是由于代码洁癖,不想在前端和后台添加callback,而且...

    cookie 跨域

    应某网友请求,做的一个Cookie跨域的简单演示 请将HTML和PHP文件放入不同的域名下测试,然后修改下面Js的调用地址

    Angularjs之如何在跨域请求中传输Cookie的方法

    一般情况我们在使用WebApi之类的技术时,都会遇到跨域的问题,这...请求到了服务端,服务端表示可以接收跨域Cookie,成交(开始重新带着Cookie发起请求) 后台代码 Response.Headers.Add("Access-Control-Allow-Crede

    Javascript实现跨域后台设置拦截的方法详解

    本文主要给大家介绍了关于Javascript跨域后台设置拦截的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍吧。 子域名之间互相访问需要跨域 结论放在开头: 1.服务端必须设置允许跨域 2.客户端...

    JS跨域解决方案之使用CORS实现跨域

    跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内容),因为我们在日常的项目开发时会不可避免的需要进行跨域操作...

    JavaScript cookie 跨域访问之广告推广

    主要介绍了JavaScript cookie 跨域访问之广告推广 的相关资料,需要的朋友可以参考下

    WebApi跨域demon

    同源策略:出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容。 正是由于这个原因,我们不同项目之间的调用就会被浏览器阻止。比如我们最常见的场景:WebApi作为...

    WebApi 跨域问题解决方案:CORS

    同源策略:出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容。 正是由于这个原因,我们不同项目之间的调用就会被浏览器阻止。比如我们最常见的场景:WebApi作为...

    cookie-sync-simulation

    1网页在沙盒1上从nginx获取html和javascript 在网络浏览器上运行JavaScript 访问sandbox-2 nodejs脚本获取沙盒2域Cookie 发出沙盒1域Cookie 将Cookie信息插入网页,并在Web浏览器上显示跨域Cookie同步信息设置本地PC...

    浅析javascript操作 cookie对象

    Cookie 对象 是一种以文件(Cookie文件)的形式保存在客户端硬盘的Cookies文件夹中的数据信息(Cookie数据)。...javascript 写入Cookie 格式: [removed]=”关键字=值[;expires=有效日期][;…]” 备注: 有效日期格式:Wdy

    sso跨域写cookie的一段js脚本(推荐)

    下面小编就为大家带来一篇sso跨域写cookie的一段js脚本(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    javascript使用window.name解决跨域问题第1/2页

    window.name 传输技术,原本是 Thomas Frank 用于解决 cookie 的一些劣势(每个域名 4 x 20 Kb 的限制、数据只能是字符串、设置和获取 cookie 语法的复杂等等)而发明的(详细见原文:《Session variables without ...

    二级域名或跨域共享Cookies的实现方法

    适用于Asp。 在主域名设置的Cookie,在各子域名共用;适用于博客等提供二级域名。这个问题,以网上有众多帖子,可惜都没有完整解决。

Global site tag (gtag.js) - Google Analytics