跨域访问Cookie
通过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的标准做法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?