在网上找了很多跨域读取Cookie的方法,但都是A域主动设置B域的Cookie,而没有B域去获取A域Cookie的方法。
所谓A域主动设置B域的Cookie
1:在B.com上新建一文件:SetCookie.aspx
protected void Page_Load(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("p3p", "CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR");
HttpCookie cookie = new HttpCookie("userid", "44");
cookie.Domain = ".b.com";
// cookie.Expires = DateTime.Now.AddSeconds((double)expires);
HttpContext.Current.Response.AppendCookie(cookie);
}
2:在A域新建一文件:Default.aspx,在前台页面调用B域的SetCookie.aspx页面,来为B域设置相应的Cookie.
<script src="http://www.b.com/SetCookie.aspx"></script>
3:在B域新建一文件:Default.aspx来显示被A域设置的Cookie。
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Request.Cookies["userid"] == null ? "" : Request.Cookies["userid"].Value.ToString());
}
4:以此访问www.a.com/default.aspx---->www.b.com/default.aspx
以上为A域主动设置B域的Cookie,适用于单点登录,但必须在B域,C域或D域上新建setcookie.aspx文件来让A域帮忙设置Cookie。
那B域C域或D域如何根据自身的需要去主动获取A域的Cookie呢?请看以下方法,以下方法为此文重点。
1:在A域新建一文件:SetCookie.aspx,此文件用来设置A域自己的Cookie。
protected void Page_Load(object sender, EventArgs e)
{
HttpCookie cookie = new HttpCookie("userid", "44");
HttpContext.Current.Response.AppendCookie(cookie);
}
2:A域的Cookie设置完了,那怎么让其他域来读取自己的Cookie呢,这就是重点了。
新建一页面:OpenID.aspx,用来让B域读取Cookie,并自动设置B域的cookie。(这里有点昏)
protected void Page_Load(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("p3p", "CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR");
if (Request.Cookies["userid"] != null)
{
Response.Write(@"
var userid=" + Request.Cookies["userid"].Value.ToString() + @";
SetCookie('userid',userid);//什么域调用此文件,设置的Cookie将是什么域的。
window.location.href=document.URL;
function SetCookie(name,value)//两个参数,一个是cookie的名子,一个是值
{
document.cookie = name + ""=""+ escape (value) ;
}
");
}
else
{
Response.Write("document.write('没有cookie');");
}
}
3:A域的工作已经完了,那B域如何得到A域的这个Cookie值呢,在B域新建一页:default.aspx
protected void Page_Load(object sender, EventArgs e)
{
if (HttpContext.Current.Request.Cookies["userid"] != null)
{
Label1.Text = HttpContext.Current.Request.Cookies["userid"].Value.ToString();
}
else
{
Response.Write(" <script src=\"http://www.a.com/openid.aspx\"></script>");
}
}
4:依次访问 www.a.com/setcookie.aspx ------> www.b.com/default.aspx 此方法用于A域开发API给其他域调用。主要用于A域API接口的开发。就像现在的SNS网站提供当前登录的用户信息给其他应用程序(如抢车位)一样,不过我不知道他们是怎么实现的,但我用此方法实现了。
总结下此方法的步骤:
1:A域设置cookie
2:B域用调用javascript脚本的方式读取A域cookie,读取后,并同步设置B域Cookie.
3:调用B域时,发现没有cookie就自动从A域获取cookie值来设置自己的Cookie。
A域可以把怎么读取的方法做成dll,提供给其他域。这称之为A域的API。
测试成功,用此方法能跨域读取session,方式是:把A域的Session值存入B域的cookie中。至于怎么存,存在什么cookie名称里,由A域提供。
分享到:
相关推荐
这样,当Iframe加载admin.php时,浏览器会接受P3P头,允许在不同域之间设置和读取Cookie,从而实现跨域登录。 至于Session,虽然它看起来与Cookie不同,但它们在很多情况下密切相关。Session通常依赖于Cookie来存储...
- 在PHP中,使用`setcookie()`函数设置Cookie,通过`$_COOKIE`超全局数组读取Cookie值。 - 设置Cookie时需指定名称、值、过期时间和作用域等参数。 - 默认情况下,Cookie仅在设置它的页面及其子目录内有效,通过...
在前后端分离的架构中,Vue.js作为前端框架与Spring Boot作为后端服务进行交互时,常常会遇到跨域和Session、Cookie失效的问题。本文将详细介绍如何解决这些问题。 首先,跨域是由于浏览器的安全策略限制,同一源...
此外,Cookie大小有限制,且通常不能跨域使用,这意味着一个网站设置的Cookie不会被其他网站读取。 5. **Java中的Cookie操作**:在Java的Servlet环境中,Cookie被封装在`javax.servlet.http.Cookie`类中。服务器...
在成功页面,服务器通过读取Cookie来确认用户已登录,并显示相应的个性化内容。退出页面,通常会清除与用户身份相关的Cookie,以实现用户登出功能。 2. Session: - 定义:Session是在服务器端存储的一系列数据,...
然而,当涉及到跨域访问时,由于浏览器的同源策略限制,不同域名下的站点无法读取对方的Cookie,包括Session ID,因此Session也无法共享。这就需要我们引入外部存储,如Redis,来作为Session仓库。 以下是使用Redis...
如果要考虑跨域共享,Cookie可以设置为跨域,但Session通常不支持。此外,对于移动设备或隐私意识强的用户,可能更倾向使用Session而非Cookie。在设计Web应用时,理解这两种机制的优缺点,并结合实际需求进行选择,...
创建一个继承自`SessionStateStoreProviderBase`的类,并重写其方法,以实现跨域存储和读取Session数据。这可能涉及到在数据库、缓存服务或其他持久化存储中保存Session数据。 4. **配置调整** 在Web.config中,...
标题"login for cookie or session or token"涉及了三种常见的用户身份验证方法:Cookie、Session和Token。让我们深入探讨这些概念及其在Golang(一种流行的开源编程语言)中的实现。 1. **Cookie**: Cookie是一...
读取Cookie则使用`$_COOKIE['user']`。 - **Session**:在PHP中,启动Session使用`session_start()`,设置Session变量如`$_SESSION['user'] = "zy"`,读取使用`$_SESSION['user']`。结束Session用`session_destroy...
5. **自动登录机制**:自动登录通常结合Session和Cookie实现。当用户登录成功后,服务器会创建一个Session,并将用户信息保存在Session中,同时在客户端设置一个Session ID的Cookie。这样,下次用户访问时,服务器...
在这个场景下,Cookie和Session成为了关键的角色。接下来,我们将深入探讨这两种技术的工作原理及其在Servlet和JSP中的应用。 首先,我们来看Cookie。Cookie是由服务器端创建并在HTTP响应头中发送到客户端(通常是...
为了解决这个问题,Session和Cookie应运而生,而Session Cookie是其中的一种方式。 **什么是Cookie?** Cookie是由服务器端发送到客户端(浏览器)的一小段信息,存储在用户的本地设备上。当客户端发起新的请求时,...
读取Cookie同样使用`$.cookie()`函数,但这次不提供第二个参数。函数会返回对应Cookie的值。 ```javascript var cookieValue = $.cookie('myCookie'); console.log(cookieValue); // 输出 "Hello, World!" ``` ###...
**注意事项:** 在修改或删除Cookie时,需要使用`response`组件,而读取Cookie时则使用`request`组件。 ### Session **1. 添加Session** Yii2的Session操作相对简单,直接通过`Yii::$app->session`即可: ```php...
跨域页面访问问题是指在多个系统集成的情况下,主系统以 iframe 或 frameset 的方式将其他子系统的页面嵌进来,导致浏览器阻止 iframe 或 frameset 的 cookie,进而使 SESSION 失效。解决办法是,在子系统的登录代码...
- ThinkPHP提供了一套完善的Cookie和Session管理API,开发者可以通过这些API方便地设置、读取和删除Cookie和Session。 - 在使用Session时,ThinkPHP会自动处理Session ID的生成和存储,通常默认将Session ID存储在...
总结来说,Cookie、Session和JWT都是处理身份验证和会话管理的方式,各有优劣。Cookie适合简单的Web应用,Session适用于需要服务器保持状态的场景,而JWT则在分布式系统和无状态认证中表现出色。理解它们之间的差异...
文件`dddl.php`可能是实现这些功能的一部分代码,例如处理session数据的存储和读取,或者处理跨域认证的逻辑。具体代码细节无法提供,因为没有实际的文件内容。通常,`dddl.php`可能会包含以下部分: - 一个自定义...
3. **跨域问题**:Cookie的域限制意味着它只能在设置它的域内被读取。如果需要在不同子域名之间共享登录状态,需要设置Cookie的域属性。 4. **隐私政策**:在使用Cookie时,必须遵守相关的隐私政策和法规,告知用户...