js同源策略之共享cookie

本文解释了同源策略的概念,探讨了其存在的必要性,并通过示例介绍了如何利用document.domain属性来实现不同网页间的Cookie共享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是同源

同domain(或ip),同端口,同协议视为同一个域,一个域内的脚本仅仅具有本域内的权限,可以理解为本域脚本只能读写本域内的资源,而无法访问其它域的资源。这种安全限制称为同源策略。

为什么要有同源限制

同源策略的目的主要是为了防止恶意获取/修改网站数据。而这些数据主要包括cookie,LocalStorage,DOM,以及发送的AJAX请求。
假设现在没有同源策略,会发生什么事情呢?大家知道,JavaScript可以做很多东西,比如:读取/修改网页中某个值。恩,你现在打开了浏览器,在一 个tab窗口中打开了银行网站,在另外一个tab窗口中打开了一个恶意网站,而那个恶意网站挂了一个的专门修改银行信息的JavaScript,当你访问 这个恶意网站并且执行它JavaScript时,你的银行页面就会被这个JavaScript修改,后果会非常严重!而同源策略就为了防止这种事情发生。
所以,我们可以知道,同源策略是必须的,但是,有的时候我们还是要规避同源策略的限制,比如说从A网站跳到B网站时,我们要读到A网站的cookie。

document.domain

document.domain属性用来得到当前网页的域名。
我们也可以给document.domain属性赋值,不过是有限制的,你只能赋成当前的域名或者基础域名。
比如:你当前域名是qa-my.test.segmentgault.com
那么你就可以设置

document.domain = ".test.segmentgault.com"

或者

document.domain = "qa-my.test.segmentgault.com"

上面的赋值都是成功的,因为qa-my.test.segmentgault.com是当前的域名,而.test.segmentgault.com是基础域名。
但是下面的赋值就会出来"参数无效"的错误:

document.domain = "google.com"

clipboard.png

因为google.com即不是当前的域名也不是当前域名的基础域名,所以会有错误出现。
这是为了防止有人恶意修改document.domain来实现跨域偷取数据。

利用document.domain 实现共享cookie

Cookie 是服务器写入浏览器的一小段信息,只有同源的网页才能共享。浏览器允许基础域名相同的网站间通过设置document.domain共享 Cookie。
举例来说,A网页是

http://my.segmentfault.com/a.html

B网页是

http://he.segmentfault.com/b.html

那么只要设置相同的document.domain,两个网页就可以共享Cookie。

document.domain = 'segmentfault.com'

现在,A网页通过脚本设置一个 Cookie

document.cookie = "domainTest=hello world"

B网页就可以读到这个Cookie

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值