|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
也得学会了PHP。然后再学,见异思迁是最不可取的,狗熊掰玉米就是这个道理,如果经常中途放弃,只能是一无所获,还浪费了N多的时间和经历,得不偿失,最重要的是,你会被别人瞧不起。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-";
?>
如今,假如在代码中以下做:
<?php
echo "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,横线的子目次?!?!?"。
但是,上面的步调将供应一个必须的戏法,以便让它可以利用!
第三步:设置装备摆设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,以下操作:
<VirtualHost ipaddress>
DocumentRoot /usr/local/www/domain1
ServerName www.domain1.com
RewriteEngine on
RewriteRule ^/-(.*)-(.*\?.*)$ $2&sessionid=$1 [L,R,QSA]
RewriteRule ^/-(.*)-(.*)$ $2?sessionid=$1 [L,R,QSA]
</VirtualHost>
<VirtualHost ipaddress>
DocumentRoot /usr/local/www/domain2
ServerName www.domain2.com
RewriteEngine on
RewriteRule ^/-(.*)-(.*\?.*)$ $2&sessionid=$1 [L,R,QSA]
RewriteRule ^/-(.*)-(.*)$ $2?sessionid=$1 [L,R,QSA]
</VirtualHost>
这些重写的划定规矩完成了下面两个URL重写的请求。
结论
经由过程利用变量联合与apache的重写功效,穿插域名cookie可以以一种复杂的体例完成。想要保护如许的
体系,不管甚么时分链接穿插域名,在利用域名变量以外,甚么也不必作了!在域名外部的链接不需求停止
修正,由于cookie会任务正常。
假如你有乐趣看一下在临盆收集中实践运作中的体系,请观赏http://www.familyhealth.com.au/。在
一些穿插域名链接上挪动你的鼠标,而且看一下当你点击后它们是若何被重写的。
或许,利用这个手艺独一的成绩就是没法删除在用户阅读器中的全体域名下的cookie。模仿的不光是模仿,模仿的同时在加改进,就成了自己的作品了。 |
|