PHP编程:完成跨域名Cookie (转) http://www.ph...
也许您在学习PHP的时候只想尽快的开发一个网站,也就会想我做网站,干嘛要学什么网页这些小儿科?不难看出,眼高手低的新手不在少数,这种思想无疑于建造空中楼阁,你不建地基,何来的房顶呢?cookie 作者:Christopher Kings-Lynne 翻译:limodouCookie真是一个巨大的创造,它答应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
RewriteRule ^/-(.*)-(.*)$ $2?sessionid=$1
</VirtualHost>
<VirtualHost ipaddress>
DocumentRoot /usr/local/www/domain2
ServerName www.domain2.com
RewriteEngine on
RewriteRule ^/-(.*)-(.*\?.*)$ $2&sessionid=$1
RewriteRule ^/-(.*)-(.*)$ $2?sessionid=$1
</VirtualHost>
这些重写的划定规矩完成了下面两个URL重写的请求。
结论
经由过程利用变量联合与apache的重写功效,穿插域名cookie可以以一种复杂的体例完成。想要保护如许的
体系,不管甚么时分链接穿插域名,在利用域名变量以外,甚么也不必作了!在域名外部的链接不需求停止
修正,由于cookie会任务正常。
假如你有乐趣看一下在临盆收集中实践运作中的体系,请观赏http://www.familyhealth.com.au/。在
一些穿插域名链接上挪动你的鼠标,而且看一下当你点击后它们是若何被重写的。
或许,利用这个手艺独一的成绩就是没法删除在用户阅读器中的全体域名下的cookie。
转自:PHPBuilder.comphp manual(PHP手册)肯定是要从网上下载一个的,它很权威,也很全面,我自己认为它是一本很好的参考书,但是不适合新手当教材使用。 曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ; 使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。 最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。 说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。 多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。 使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。 再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。 其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎 没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。 至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。 有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。 刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。 没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。 使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。 使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。 建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。 其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
页:
[1]