跨域访问Cookie

本文介绍使用jQuery实现跨域访问的方法。通过设置和获取cookie的示例演示了如何利用JSONP进行跨域请求。详细展示了两个不同域名下网页间的交互过程。

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

通过jQuery.get是不能异步访问跨域资源的。主要是因为安全考虑,否则其他域有可能获得当前页的cookie造成隐私泄漏。但js确可以跨域访问,因为所有浏览器都支持refer外部的js文件。访问外部域的js时会发送外部域的cookie,这样在返回的js中就能获取值了。

创建两个website,分别叫local.domain1.com和local.domain2.com

domain1中负责set和get本域的cookie,分别为setcookie.aspx和getcookie.aspx

//setcookie.aspx
public partial class SetCookie : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Headers.Add(
"P3P",
@"CP=""CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR""");

if (Response.Cookies != null && Request.Cookies.AllKeys.Contains("password"))
Response.Write(Request.Cookies[
"password"].Value);
HttpCookie aCookie
= new HttpCookie("password");
aCookie.Value
= "secret1!";
aCookie.Expires
= DateTime.Now.AddDays(1);
Response.SetCookie(aCookie);
}
}

//getcookie.aspx
public partial class GetCookie : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string val = string.Empty;
if (Request.Cookies != null && Request.Cookies.AllKeys.Contains("password"))
val
= (Request.Cookies["password"].Value);
Response.Write(Request.QueryString[
"callback"] + "('" + val + "')");
}
}

setcookie.aspx => 存放password=secret1!的cookie,这存在潜在的危险,一开始的header是为了允许ie修改cookie

getcookie.aspx => 返回jsonp数据,其中的callback是由jquery自动生成的

在domain2中,添加访问页面getcrossdomaincookie.aspx

<script src="http://code.jquery.com/jquery-1.5.1.min.js" type="text/javascript"></script>
<script>
$(function () {
$.getJSON('http://local.domain1.com/getcookie.aspx?callback=?', function (data) {
alert(data);
});
});
</script>

关键在于callback=?,其中?说明由jquery自动生成jsonp的callback方法。

其实getJSON的设计有些tricky,包含了两种不同的行为。如果没有callback=?,就是普通的异步访问本域的资源然后返回结果。但如果是jsonp的形式,事实上会通过在header tag中动态加入script tag然后在载入后删除(IE似乎没有删除),当然这也是jsonp的标准做法。

转载于:https://www.cnblogs.com/dragonpig/archive/2011/02/27/1966394.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值