社区
基础编程
帖子详情
怎样实现跨服务器的身分认证?
bihu
2001-10-28 02:39:14
在一台服务器登录后,进入另一台服务器不需要重新认真,
就像网易,登录后可以进入上海社区,也可以进入北京社区
...全文
71
4
打赏
收藏
微信扫一扫
点击复制链接
分享
下载分享明细
分享
举报
写回复
4 条
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bihu
2001-10-29
多谢楼上的,可是我用的别人的主页空间,没办法配置apache呀
打赏
举报
回复
赞
blues-star
2001-10-29
用header函数向另外一台服务器发送HTTP头信息,利用HTTP头完成认证,这个要参考HTTP1.1的相关资料,而且,还要看对方服务器的认证是通过什么进行的,如果是通过session进行,还有机会,直接把session写到http头里就可以了,如果是通过其他的一些什么(https),恐怕不好办咯~,我没有试过,好难的,如果非常容易,这个网络早乱套了~
打赏
举报
回复
赞
jnsky521
2001-10-28
第一步:创建预置脚本
将下面的代码加到预置脚本中(或出现在所有脚本之前的函数中)。
<?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。
打赏
举报
回复
赞
zxyufan
2001-10-28
网易是用cookie的吗?
打赏
举报
回复
赞
相关推荐
如何
跨
服务器
设置触发器?
触发器我们一般在同一个
服务器
的数据库中使用,不同的
服务器
之间操作就比较少,现在要
实现
跨
服务器
执行触发器操作。 开始从网上查了好多资料,发现都不能解决;最让我感觉到有希望的是如下的方法,按照这个操作让...
什么是JWT? Token? 如何基于Token进行身份验证?
JWT的声明一般被用来在身份提供者和服务提供者间传递被
认证
的用户身份信息,以便于从资源
服务器
获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于
认证
,也可被加密。 JWT 本质...
为什么使用Token方式
实现
用户身份鉴权
认证
?
客户端每次向服务端请求资源的时候需要带着服务端签发的 Token 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据 四、Token的使用 在我们做用户权限
认证
的时候,...
linux php sftp
实现
跨
服务器
文件传输
linux php sftp
实现
跨
服务器
文件传输什么是SFTP?SFTP 与 FTP 区别终端使用sftpsftp可用命令php 中通过SSH2 扩展模块 使用SFTP安装php SSH2 扩展编写SFTP使用类 什么是SFTP? SFTP是一种安全的文件传输协议,一种...
springboot
实现
身份
认证
好久没总结项目了,最近...需要一个管理平台,去管理一些基础数据有一些导入导出功能,能
实现
基础表的crud操作,这里主要用的是人人开源的开源版本,前后台都是用的人人的,还是比较好上手的,后端是springboot 2....
发帖
基础编程
微信扫一扫
点击复制链接
分享社区
下载分享明细
2.1w+
社区成员
14.0w+
社区内容
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
帖子事件
创建了帖子
2001-10-28 02:39
社区公告
暂无公告