php实现跨域名 Cookie

别扭啊真

别扭啊真

2016-02-19 16:48

图老师小编精心整理的php实现跨域名 Cookie希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

  Cookie 真是一个伟大的发明,它允许 web 开发者保留他们的用户的登录状态。然而,当你的站点或网络有一个以上的域名时就会出现问题了。

  在 Cookie 规范上说,一个 cookie 只能用于一个域名,不能够发给其它的域名。因此,如果在浏览器中对一个域名设置了一个 cookie,这个 cookie 对于其它的域名将无效。如果你想让你的用户从你的站点中的其中一个进行登录,同时也可以在其它域名上进行登录,这可真是一个大难题。

  我的解决方案将使用下面的一般框架:

  一个预置的脚本将用来接受通过 GET 或 COOKIE 方式传递过来的 sessionid 号。它将比 COOKIE 优先选择 GET 变量。所以,无论何时需要引用交叉的域名时,我们把 sessionid 做为一个 URL 参数进行发送。修改 Apache 配置,用来实现重写所有的交叉域名的 cookie。这样做的原因一会儿就会清楚了。在任何时候出现一个交叉域名引用时使用变量。

  第一步:创建预置脚本

  将下面的代码加到预置脚本中(或出现在所有脚本之前的函数中)。

  

?php/* 支持交叉域名cookie...  如果GET变量已经设置了,并且它与cookie变量不同  则使用get变量(更新cookie) */global $HTTP_COOKIE_VARS, $HTTP_GET_VARS;if (isset($sessionid) && isset($HTTP_GET_VARS['sessionid']) && ($HTTP_COOKIE_VARS['sessionid'] != $HTTP_GET_VARS['sessionid'])) {  SetCookie('sessionid', $HTTP_GET_VARS['sessionid'], 0, '/', '');  $HTTP_COOKIE_VARS['sessionid'] = $HTTP_GET_VARS['sessionid'];  $sessionid = $HTTP_GET_VARS['sessionid'];}?

  一旦这个代码运行之后,一个全局的 'sessionid' 变量将可以用于脚本。它将保存着用户的 cookie 中的 sessionid 值,或者是通过 GET 请求发来的 sessionid 值。

  第二步:为所有的交叉域名引用使用变量

  创建一个全局的配置文件,用于存放可以进行切换的域名的基本引用形式。例如,如果我们拥有 domain1.com 和 domain2.com,则如下设置:

  

?php$domains['domain1'] = "http://www.domain1.com/-$sessionid-";$domains['domain2'] = "http://www.domain2.com/-$sessionid-";?

  现在,如果在代码中如下做:

  

?phpecho "Click a href="". $domains['domain2']. "/contact/?email=yes"here/a to contact us.";?

  你将产生如下的输出:

  Click a href="http://www.domain2.com/-66543afe6543asdf6asd-/contact/?email=yes"here/a to contact us.

  在这里 sessionid 已经被插入到 URL 中去了。

  在这个地方,你可能会想这样可能会在web服务器上打开名为横线,sessionid,横线的子目录?!?!?"。然而,下面的步骤将提供一个必需的戏法,以便让它能够使用!

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

  第三步:配置Apache

  现在,剩下的步骤就是配置 apache 来重写这个 URL:

  http://www.domain2.com/-66543afe6543asdf6asd-/contact/

  变成这样:

  http://www.domain2.com/contact/?sessionid=66543afe6543asdf6asd

  并且这种url:

  http://www.domain2.com/-66543afe6543asdf6asd-/contact/?email=yes

  变成这样:

  http://www.domain2.com/contact/?email=yes&sessionid=66543afe6543asdf6asd

  为了实现它,简单地配置两个虚拟服务器,作为 domain1 和 domain2,如下操作:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

  

VirtualHost ipaddressDocumentRoot /usr/local/www/domain1ServerName www.domain1.comRewriteEngine onRewriteRule ^/-(.*)-(.*?.*)$ &sessionid= [L,R,QSA]RewriteRule ^/-(.*)-(.*)$ ?sessionid= [L,R,QSA]/VirtualHostVirtualHost ipaddressDocumentRoot /usr/local/www/domain2ServerName www.domain2.comRewriteEngine onRewriteRule ^/-(.*)-(.*?.*)$ &sessionid= [L,R,QSA]RewriteRule ^/-(.*)-(.*)$ ?sessionid= [L,R,QSA]/VirtualHost

  这些重写的规则实现了上面两个 URL 重写的要求。

  结论

  通过使用变量结合与 apache 的重写功能,交叉域名 cookie 可以以一种简单的方式实现。想要维护这样的系统,无论什么时候链接交叉域名,在使用域名变量之外,什么也不用作了!在域名内部的链接不需要进行修改,因为 cookie 会工作正常。

  如果你有兴趣看一下在生产网络中实际运作中的系统,请参观 http://www.familyhealth.com.au/ 。在一些交叉域名链接上移动你的鼠标,并且看一下当你点击后它们是如何被重写的。

  也许,使用这个技术唯一的问题就是无法删除在用户浏览器中的全部域名下的 cookie。

展开更多 50%)
分享

猜你喜欢

php实现跨域名 Cookie

Web开发
php实现跨域名 Cookie

实现跨域名Cookie

PHP
实现跨域名Cookie

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

使cookie实现跨域名

PHP
使cookie实现跨域名

实现Cookie

编程语言 网络编程
实现Cookie

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

AJAX的阻塞及跨域名解析

Web开发
AJAX的阻塞及跨域名解析

用PHP编程开发“虚拟域名”系统

PHP
用PHP编程开发“虚拟域名”系统

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Oracle数据库编写有效事务指导方针

Oracle数据库编写有效事务指导方针

如何在MSSQL2005中动态创建表表名动态根据参数确定

如何在MSSQL2005中动态创建表表名动态根据参数确定
下拉加载更多内容 ↓