`
pcajax
  • 浏览: 2162956 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

如何跨域来同步不同网站之间的Cookie

阅读更多
如何跨域来同步不同网站之间的Cookie
  来源:iTbulo.com 2005-12-31
  Cookie简介
  首先,我们对Cookie做一个简单的介绍,并以ASP为例来说明如何利用重定向来同步不同网站之间的cookie。
  Cookie是存储在客户端计算机中的一个小文件,这就意味着每当一个用户访问你的站点,你就可以秘密地在它的硬盘上放置一个包含有关信息的文件。这个文件几乎可以包含任何你打算设置的信息,包括用户信息、站点状态等等。这样的话,就有一个潜在的危险:这些信息有可能被黑客读取。为了防止这个问题的发生,一个有效的办法就是cookie只能被创建它的域所存取。这就是说:比如ytu.edu.cn只能访问ytu.edu.cn创建的cookie。通常来讲,这没有什么问题;但是,如果需要两个不同域上的两个不同站点共享保存在cookie中的用户信息,该如何处理呢?当然可以选择复制用户信,但是,如果你需要用户只能在一个站点上注册,并且自东成为另外一个站点的注册用户呢?或者,两个站点共享一个用户数据库,而又需要用户自动登录呢?这时候,跨越域共享cookie是最好的解决方案。
  这里,先看一些ASP处理cookie的代码,以便以后便于引用参考。
  '创建Cookie ,需要注意的是目前高版本的浏览器默认都是不允许跨域读取cookie的,或许写入可以?
  Response.Cookies("MyCookie").Expires=Date+365
  Response.Cookies("MyCookle").Domain="mydomaln.com"
  Response.Cookies("MyCookle")("Username")=strUsername
  Response.Cookies("MyCookle")("Password")=strPassword
  读写cookie非常简单,上面的代码创建一个cookie并给cookie设置属性:域、过期时间,以及其他一些保存在cookie中的值。这里,strUsename,strPassword是在前面某个地方设置的变量。然后,通过下面的语句在cookie中读取。
  '读取Cookie ,需要注意的是目前高版本的浏览器默认都是不允许跨域读取cookie的,或许写入可以?
  datExpDate=Request.Cookies("MyCookie")
  strDomaln=Request.Cookies("MyCookle").Domain
  strUsername=Request.Cookies("MyCookle")("Username")
  strPassword=Request.Cookies("MyCookie")("Password")
  更详细的信息,可以参考ASP的资料。
  实现
  简单地共享cookie的诀窍是重定向,一般过程为:
  1.一个用户点击siteA.com。
  2.如果用户没有siteA.com的cookie,就把用户重定向到siteB.com。
  3.如果用户有siteB.com的cookie,把用户连同一个特殊的标志(将在下面解释)重定向回siteA.com,否则,只把用户重定向到siteA.com。
  4.在siteA.com创建cookie。
  看起来很简单,仔细分析一下:siteA.com和siteB.com共享相同的用户设置,所以,如果用户有siteB.com的cookie(已经注册),siteA.com能够同样读取cookie、提供cookie所允许的特性。这样,访问siteA.com的用户就如同访问了siteB.com。
  这个检查的环节应该在siteA.com中的文件所包含一个cookies.inc中实现。让我们看一下这段代码:
  'SiteA.com"检查cookie
  If Request.Querystring("Checked")<>"True" then
  If not Request.Cookies("SiteA_Cookie").Haskeys then
   '重走向到siteB.com
   Response.Redlrect("http://www.siteB.com/cookie.asp")
  End if
  End if
  如果用户有一个siteA.com的cookie,则不需要做任何事情了;第一个if语句用来消除无限的循环。让我们看一下siteB.com上的cookie.asp文件来获得进一步的理解。
  'SiteB.com
  '检查cookie
  If not Request.Cookies("SlteB_Cookle").Haskeys then
  '重定向到 siteA.com
  Response.Redirect("http://www.sitea.com/index.asp%22&%22?checked=True")
  Else
  '获取username
  strUsername=Request.Cookies("SiteB_Cookie")("Username")
  '将用户连同一个特殊的标志返回到siteA.com
  Response.Redlrect("http://www.sitea.com/index.asp%22&%22?checked=True"&"identrfer="&strUsername)
  End if
  如果用户在siteB.com上仍没有cookie,于是,将他送回到siteA.com,并且通过在查询语句中提供一个叫做"checkd"的参数让应用程序知道你已经检查过cookie了。否则,将用户送回到siteB.com,并退出循环。
  然而,如果用户拥有siteB.com的cookie,我们需要将用户送回siteA.com并告诉siteA.com。为此,我们在数据库中附加一个唯一的标志,username。所以,我们扩展siteA.com中的代码。
  'SiteA.com
  '检查标志
  If Request.Querystring("identifier")<>"" then
  strUsername=Request.Querystring("identifier")
  '记录到数据库的程序代码写在此
  '下面是保存cookie
  Response.Cookies("siteA_Cookie").Expires=Date+365
  Response.Cookies("SiteA_Cookie").Domain="siteA.com"
  Response.Cookies("siteA_Cookie")("Username")=strUsername
  End if
  最后,我们回到siteA.com。文件的第一部分(l-l)检查是否完成了cookie的检查,由于可以明显地知道已经完成(由语句中的"checked"参数表明),进行到l—3所示的程序的第二部分。如果存在特殊的标志,我们就可以在siteA.com创建cookie。使用这个特殊的标志(在这里是username),我们可以在任何需要的时候查询数据库。然后,设置cookie,显示页面的其他部分。如果没有指定的标志,也没必要担心,只要简单地显示页面的余下部分。
  这样,毫不费力地,siteA.com拥有了和siteB.com一样的cookie。我们可以传输更多的信息而不只是一个标志,并且,将网络流量控制在最小范围内。
  要注意一点,即使用户拥有siteA.com上的cookie,仍需要检查siteB.com。通常来讲,这不是必须的,也会节约时间。但是,一旦用户在siteB.com更改个人信息?这样做,会保持所有信息的同步。
  Cookie环
  要完成这些,我们需要两个文件:一个在原始站点服务器(siteA.com),完成检查;一个在参考服务器(siteB.com),验证用户。如果有一台参考服务器包含有需要的所有用户信息或cookie,就可以增加随意多的原始服务器,所需要做的就是在所有要共享cookie的服务器上增加cookie.inc文件。
  也可以以相反的次序执行,例如,用户第一次访问siteB.com,而siteA.com包含用户信息。访问过siteA.com却从未访问过siteB.com的用户也可以登录到siteB.com,并且拥有所有的曾经的设置。注意,如果拥有多个参考服务器,这样将会很使人迷惑,并且消耗过多的资源,因为必须将用户重定向到每一台参考服务器。
  理论上讲,可以拥有一个所有站点都共享相同的用户的网络。最可行的方案就是建立共享cookie环。将参考服务器列表存储在一个地方(备份服务器),以便每个参考服务器可以查找并决定重定向用户的下一个站点。记住一定要通过查询字符串的意思跟踪用户是在哪个原始服务器开始。这样信息的传输非常迅速,这个环节变得越来越可行。
  这里还存在一些问题,首先是反应时间。对用户而言,他们最好不知道过程是怎样的。他所需的时间依赖于siteA.com、siteB.com之间的连接,有可能会比较长,在实现cookie环时可能会更长。
  再一个主要问题,就是每一个实现者大都会面对无限的重定向。这有很多原因,例如:用户的测览器不支持cookie。这就需要再设计代码来监测用户浏览器的性能。
  最好,还需要注意安全问题。如果有些黑客发现了其中的诀窍,他可能会得到cookie中的信息。最简单的防范办法就是保护参考服务器,只允许原始服务器访问Cookie.asp文件。
如何跨域来同步不同网站之间的Cookie 来源:iTbulo.com 2005-12-31   Cookie简介   首先,我们对Cookie做一个简单的介绍,并以ASP为例来说明如何利用重定向来同步不同网站之间的cookie。   Cookie是存储在客户端计算机中的一个小文件,这就意味着每当一个用户访问你的站点,你就可以秘密地在它的硬盘上放置一个包含有关信息的文件。这个文件几乎可以包含任何你打算设置的信息,包括用户信息、站点状态等等。这样的话,就有一个潜在的危险:这些信息有可能被黑客读取。为了防止这个问题的发生,一个有效的办法就是cookie只能被创建它的域所存取。这就是说:比如ytu.edu.cn只能访问ytu.edu.cn创建的cookie。通常来讲,这没有什么问题;但是,如果需要两个不同域上的两个不同站点共享保存在cookie中的用户信息,该如何处理呢?当然可以选择复制用户信,但是,如果你需要用户只能在一个站点上注册,并且自东成为另外一个站点的注册用户呢?或者,两个站点共享一个用户数据库,而又需要用户自动登录呢?这时候,跨越域共享cookie是最好的解决方案。   这里,先看一些ASP处理cookie的代码,以便以后便于引用参考。   '创建Cookie ,需要注意的是目前高版本的浏览器默认都是不允许跨域读取cookie的,或许写入可以?  Response.Cookies("MyCookie").Expires=Date+365   Response.Cookies("MyCookle").Domain="mydomaln.com"   Response.Cookies("MyCookle")("Username")=strUsername   Response.Cookies("MyCookle")("Password")=strPassword   读写cookie非常简单,上面的代码创建一个cookie并给cookie设置属性:域、过期时间,以及其他一些保存在cookie中的值。这里,strUsename,strPassword是在前面某个地方设置的变量。然后,通过下面的语句在cookie中读取。   '读取Cookie ,需要注意的是目前高版本的浏览器默认都是不允许跨域读取cookie的,或许写入可以?  datExpDate=Request.Cookies("MyCookie")   strDomaln=Request.Cookies("MyCookle").Domain   strUsername=Request.Cookies("MyCookle")("Username")   strPassword=Request.Cookies("MyCookie")("Password")   更详细的信息,可以参考ASP的资料。   实现   简单地共享cookie的诀窍是重定向,一般过程为:   1.一个用户点击siteA.com。   2.如果用户没有siteA.com的cookie,就把用户重定向到siteB.com。   3.如果用户有siteB.com的cookie,把用户连同一个特殊的标志(将在下面解释)重定向回siteA.com,否则,只把用户重定向到siteA.com。   4.在siteA.com创建cookie。   看起来很简单,仔细分析一下:siteA.com和siteB.com共享相同的用户设置,所以,如果用户有siteB.com的cookie(已经注册),siteA.com能够同样读取cookie、提供cookie所允许的特性。这样,访问siteA.com的用户就如同访问了siteB.com。   这个检查的环节应该在siteA.com中的文件所包含一个cookies.inc中实现。让我们看一下这段代码:   'SiteA.com"检查cookie   If Request.Querystring("Checked")<>"True" then   If not Request.Cookies("SiteA_Cookie").Haskeys then   '重走向到siteB.com   Response.Redlrect("[url=http://www.siteB.com/cookie.asp]http://www.siteB.com/cookie.asp[/url]")   End if   End if   如果用户有一个siteA.com的cookie,则不需要做任何事情了;第一个if语句用来消除无限的循环。让我们看一下siteB.com上的cookie.asp文件来获得进一步的理解。   'SiteB.com   '检查cookie   If not Request.Cookies("SlteB_Cookle").Haskeys then   '重定向到 siteA.com   Response.Redirect("[url=http://www.siteA.com/index.asp"&"?checked=True]http://www.siteA.com/index.asp"&"?checked=True[/url]")   Else   '获取username   strUsername=Request.Cookies("SiteB_Cookie")("Username")   '将用户连同一个特殊的标志返回到siteA.com   Response.Redlrect("[url=http://www.siteA.com/index.asp"&"?checked=True"&"identrfer="&strUsername]http://www.siteA.com/index.asp"&"?checked=True"&"identrfer="&strUsername[/url])   End if   如果用户在siteB.com上仍没有cookie,于是,将他送回到siteA.com,并且通过在查询语句中提供一个叫做"checkd"的参数让应用程序知道你已经检查过cookie了。否则,将用户送回到siteB.com,并退出循环。   然而,如果用户拥有siteB.com的cookie,我们需要将用户送回siteA.com并告诉siteA.com。为此,我们在数据库中附加一个唯一的标志,username。所以,我们扩展siteA.com中的代码。   'SiteA.com   '检查标志   If Request.Querystring("identifier")<>"" then   strUsername=Request.Querystring("identifier")   '记录到数据库的程序代码写在此   '下面是保存cookie   Response.Cookies("siteA_Cookie").Expires=Date+365   Response.Cookies("SiteA_Cookie").Domain="siteA.com"   Response.Cookies("siteA_Cookie")("Username")=strUsername   End if   最后,我们回到siteA.com。文件的第一部分(l-l)检查是否完成了cookie的检查,由于可以明显地知道已经完成(由语句中的"checked"参数表明),进行到l—3所示的程序的第二部分。如果存在特殊的标志,我们就可以在siteA.com创建cookie。使用这个特殊的标志(在这里是username),我们可以在任何需要的时候查询数据库。然后,设置cookie,显示页面的其他部分。如果没有指定的标志,也没必要担心,只要简单地显示页面的余下部分。   这样,毫不费力地,siteA.com拥有了和siteB.com一样的cookie。我们可以传输更多的信息而不只是一个标志,并且,将网络流量控制在最小范围内。   要注意一点,即使用户拥有siteA.com上的cookie,仍需要检查siteB.com。通常来讲,这不是必须的,也会节约时间。但是,一旦用户在siteB.com更改个人信息?这样做,会保持所有信息的同步。   Cookie环   要完成这些,我们需要两个文件:一个在原始站点服务器(siteA.com),完成检查;一个在参考服务器(siteB.com),验证用户。如果有一台参考服务器包含有需要的所有用户信息或cookie,就可以增加随意多的原始服务器,所需要做的就是在所有要共享cookie的服务器上增加cookie.inc文件。   也可以以相反的次序执行,例如,用户第一次访问siteB.com,而siteA.com包含用户信息。访问过siteA.com却从未访问过siteB.com的用户也可以登录到siteB.com,并且拥有所有的曾经的设置。注意,如果拥有多个参考服务器,这样将会很使人迷惑,并且消耗过多的资源,因为必须将用户重定向到每一台参考服务器。   理论上讲,可以拥有一个所有站点都共享相同的用户的网络。最可行的方案就是建立共享cookie环。将参考服务器列表存储在一个地方(备份服务器),以便每个参考服务器可以查找并决定重定向用户的下一个站点。记住一定要通过查询字符串的意思跟踪用户是在哪个原始服务器开始。这样信息的传输非常迅速,这个环节变得越来越可行。   这里还存在一些问题,首先是反应时间。对用户而言,他们最好不知道过程是怎样的。他所需的时间依赖于siteA.com、siteB.com之间的连接,有可能会比较长,在实现cookie环时可能会更长。   再一个主要问题,就是每一个实现者大都会面对无限的重定向。这有很多原因,例如:用户的测览器不支持cookie。这就需要再设计代码来监测用户浏览器的性能。   最好,还需要注意安全问题。如果有些黑客发现了其中的诀窍,他可能会得到cookie中的信息。最简单的防范办法就是保护参考服务器,只允许原始服务器访问Cookie.asp文件。
<script>document.getElementById("ubbcontent").style.display="none";</script>
分享到:
评论

相关推荐

    如何使用localstorage代替cookie实现跨域共享数据问题

    因为网站系统的日益庞大,不同域名业务,甚至不同合作方网站的cookie可能或多或少需要进行共享使用,遇到这个情况的时候,大家一般想到的是使用登录中心分发cookie状态再进行同步进行解决,成本较高而且实施起来比较...

    二级域名和顶级域名需要同步登录如何设置cookie作用域1

    在互联网应用中,用户在访问一个网站的不同子域名之间保持登录状态是非常常见的需求。例如,如果用户在`www.example.com`上登录后,他们也应该在`blog.example.com`或`shop.example.com`等子域名上自动登录。实现...

    跨域共享session (实现http跳转https 共享session)

    标题中的“跨域共享session”是指在Web开发中,如何在不同的域名或协议(如HTTP和HTTPS)之间共享用户登录状态。通常,由于浏览器的安全策略,不同源的Web应用程序之间不能共享Cookie,其中包括用于存储session信息...

    javascript跨域方案总结

    4. 如果是同源策略导致的iframe跨域问题,可以利用window.postMessage API来实现在不同源的窗口之间传递消息。只要双方监听和发送消息的事件是同步的,就可以实现跨域通信。 5. 代理服务器 通过设置一个中间代理...

    java web session跨域共享(redis)

    然而,当涉及到跨域访问时,由于浏览器的同源策略限制,不同域名下的站点无法读取对方的Cookie,包括Session ID,因此Session也无法共享。这就需要我们引入外部存储,如Redis,来作为Session仓库。 以下是使用Redis...

    Ajax跨域通信解决异步加载及信息同步实操——以石家庄市文献资源平台为例.pdf

    通过模拟用户点击获取cookie,绕过了同源策略的限制,实现了不同服务之间的统一登录和信息同步,提升了平台的用户友好性和效率。这一实践对于其他类似平台的开发具有借鉴意义,展示了如何利用Ajax技术有效地处理跨域...

    Yii2实现多域名跨域同步登录退出

    由于session的cookie域也被设置为顶级域名,后台(backend)***能够识别到该session,从而实现跨域同步登录。退出操作也是同理,清除顶级域名下的session后,所有二级域名下的登录状态都会被同步清除。 最后,文章...

    跨域点单登录源码SSO_cross_domain

    - **Cookie与Session**:在某些实现中,可能会用到Cookie来携带令牌,而Session则用于在服务器端存储用户状态。 - **CORS(Cross-Origin Resource Sharing)**:用于设置浏览器允许哪些跨域请求,是实现跨域访问的...

    session跨域的共享--更改配置

    为了实现session的跨域共享,我们需要对PHP的配置文件php.ini进行相应的修改,确保session cookie可以在不同的子域名之间共享。以下是在php.ini文件中进行的关键配置: #### 1. session.cookie_domain 设置 ``` ...

    黑马程序员_PHP_课程同步笔记day39:cookie介绍 .docx

    浏览器基于域名来决定哪个网站可以操作哪些Cookie。 - **Cookie的有效期** Cookie的有效期由`maxAge`属性控制,以秒为单位。如果`maxAge`为正数,Cookie将在指定秒数后过期,浏览器会将这类Cookie持久化保存在...

    webview与服务器共享cookie操作

    在某些场景下,例如用户需要登录后才能访问特定功能,我们就需要处理WebView与服务器之间的会话管理,尤其是cookie的共享。本篇将详细讨论如何实现"webview与服务器共享cookie操作"。 首先,理解cookie的工作原理至...

    C#不同域名之间的Session共享

    默认情况下,ASP.NET的Session是基于Cookie的,每个Cookie都有一个特定的域限制,这意味着Session信息不能在不同的域名之间直接传递。为了解决这个问题,我们可以采用以下几种策略: 1. **Cookieless Session**:...

    cookie-sync-simulation

    Cookie同步模拟这是模拟,以了解我们如何使用JavaScript创建跨域Cookie同步Cookie同步流程脚步显示sandbox-2网页使用网络浏览器访问sandbox-2网页在沙盒2上从nginx获取html和javascript 在网络浏览器上运行...

    discuz与java通过cookie共享登陆

    当用户访问支持Cookie的网站时,服务器可以通过读取这些Cookie来识别用户的身份,从而实现会话保持。 在Discuz与Java应用之间共享登录状态,我们需要做以下几步: 1. **实现跨域资源共享(CORS)**:由于Discuz和...

    源码!整合discuz与网站的同步登录

    首先,理解同步登录的核心原理:通过共享session或cookie来实现用户身份的传递。当用户在主站登录后,会生成一个唯一标识,这个标识通常存储在session或加密后的cookie中。当用户访问Discuz!时,如果能够识别到这个...

    javascript 中Cookie读、写与删除操作.docx

    此外,还可以利用特殊的方法实现跨域同步Cookie: ```javascript // 原页面js里 window.location = "http://anotherwebsite:1234/GetCookie/Index?" + document.cookie; // 另一个网站的脚本 var url = window....

    user-session-synchronizer:Wordpress插件允许通过基于已验证的电子邮件同步用户数据和cookie会话来使用户从一个安装登录到另一个安装

    特征同步安装之间的会话通过新注册验证用户电子邮件通过手动管理员操作验证用户电子邮件通过电子邮件验证码验证用户电子邮件防止用户表单更改电子邮件显示历史会话如果用户不存在,则自动添加新订户注销时销毁会话...

    关于二级域名下使用一级域名下的COOKIE的问题

    此外,不同浏览器对跨域Cookie的支持和处理方式可能略有差异,某些浏览器可能会有同源策略的限制,因此在实际部署时,应进行充分的测试,确保在各种浏览器环境下都能正常工作。 总之,要实现一级域名与二级域名间...

    JS+COOKIE+JSON记录用户浏览过的文章

    同时,考虑到跨域问题和数据持久化,还可以考虑结合现代浏览器提供的Web Storage(LocalStorage和SessionStorage)或利用HTTPOnly Cookie防止JavaScript访问,以及适时地将数据同步到服务器端数据库。

Global site tag (gtag.js) - Google Analytics