fsockopen的疑虑
作者 斯人 | 发布于 2012 年 3 月 21 日
PHP PHP内核

完全三套不同的系统,
想用他们实现同步登陆,注册等。
那么,能想到的方法有哪些?
Ucenter or sock post。
UC是discuz旗下的产品,如果没记错在7.x版本中出现的。
好处就是通过一个入口 实现N各子应用的同步。
这也是它的缺点,如果要实现三套系统的同步,就必须用UC的入口才可以 。
比如 discuz,phpcms,thinksns整合。
那么 用UC添加应用的办法,就必须在discuz中登陆操作。
这个办法就不说了。。
下面说说fsockopen。
fsockopen是PHP内置的函数
用它可以模拟GET,POST。
一个思路就是 可以远程POST给我们的登陆入口
假如我们三个项目的域名是:
discuz.s
thinksns.s
phpcms.s

对应的登陆文件假如都是login.php
模拟post的提交地址就是
discuz.s/login.php
thinksns.s/login.php
phpcms.s/login.php
具体实现代码这里就不提了。。
理论与实践上都可以成功,只要你传递给login.php的参数正确,就一定会登陆成功。
可是。。可是。。。
模拟Post之后,你输入返回值 是登陆的状态。但用另外一个窗口访问此网站,却是未登录状态。。
问题肯定出在cookie上。
作用域?还是 cookie种上就失效了?
用curl问题也是一样的。
原因猜测:
fsockopen 和 curl都是采用socket连接来实现的,也就是说与浏览器没有关系。
。。抽时间去看看fsockopen的源码再来解释这个问题吧。这里记录一下。

原文出处:http://www.imsiren.com/archives/434