有N个网站,假设域名如下a.test.com,b.test.com,c.test.com,d.test.com......N个网站都存在session['e'],现在有一需求,在网站b中执行操作,通知a清除session['e'],a收到命令后,再通知其他服务器清除session['e'],我不想用ajax做,因为涉及到不能用js的情况,我想要的是后台之间的交互,请问各位有什么好方法
调试欢乐多
crul清不了吧,我试过,socket也不行
能举一个简单的例子吗?不太明白,假设我在a用crul访问c,在c中怎样清除呢?我试过不行啊?可能我理解有误?代码如下,仅供参考,并不能直接运行:
a:
$url = "http://c.test.com/index.php?r=site/logout";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$content = curl_exec($ch);
if(curl_errno($ch)){
print curl_error($ch);
}
curl_close($ch);c:
session_start();
session_unset();
用get方式传,那是怎么调用这个地址?用header?因为我试过,只有用header跳转到那里,才能删除这个session,其他都删不了。我的问题不是怎么去判断删,而是怎样过去删
谢谢,我的方法确实没有必要传参数,只需要删除session就行,但我不想用header(用这个其实我也实现出来了),因为我可能有多个这样的请求,太费效率了。我想做到http_request这样的调用效果,但无奈crul或是socket都无法直接删除session,我想要的是一个更有效率的算法
假定接收程序为 unsession.php,则只需 fopen("http://x.test.com?var=e"); 即可但这不是问题的所在!
你是要删除谁的 session['e']?
如果是某一个用户的,那么你如何得知该用户在那个网站的 sessionid
如果是全部的,那你就得遍历全部的session数据文件(假定session以php默认方式保存)。去完成:读取、反序列化、修改、序列化、保存等一些列动作,而不管某个session已经失效了况且 session 变量是程序产生的,你没有修改程序,又如何能删去session变量呢?
这个方法可以试试,我应该如何获取该网站上指定的某个sessionid?
<img src="http://otherdomain/api.php" width="0" height="0">
在api.php里,做相应的操作就好了,多个域名,就多个0*0图片或者 <script type="text/javascript" src="http://otherdomain/api.php"></script>……也可以
晕,我也看错了,整个流程应该是这样。首先B通知A去清除A的session['e'],A完成后再分别通知C,D......这些清除自己的session['e'],这时A不需要等待C,D等是否操作完成才通知下一个
我访问a站,于是a站上有一个我的session;同时你访问a站,于是a站上有一个你的session
那么清理程序是清理我的session,还是清理你的session?
效果,我没测试过……
a
$url = "http://c.test.com/index.php?r=api/lo";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$content = curl_exec($ch);
var_dump($content);
if(curl_errno($ch)){
print curl_error($ch);
}
curl_close($ch);c
session_id("0iako1eum32vpv3511gjdcdn63");
session_start();
var_dump($_SESSION);我看到的输出结果,是array(0) { }啊,这样如何清除session
sessionid可以通过数据库记录在a,a根据其他应用发来的参数就可以搜索得到,问题是拿到这个sessionid后如何删除session,注意:a是被某应用访问,就是用户真正访问的是某应用,某应用通过crul或fsopen等访问a
js当然可以用,我用ajax的方法也实现了我要的功能,但现在出现一种情况,就是被限制不能用js(例如手机)
首先 a 可以通过任何有效的途径发起对 c 的访问:fopen、fsockopen、curl甚至include
但一定要保证将 sessionid 作为参数传递过去,注意这个 sessionid 是在 c 中的 sessionid,而不是在 a 中的。除非你的那些网站都通过同一数据库保存 session 信息,并在各网站中维持同一用户的 sessionid 唯一。然后在 c 网站清理程序中
session_id(传入的sessionid);
session_start();
对 session 的相应操作
是的,我就是这样做的,但依然无法访问到session,就如我26楼的代码,其中的0iako1eum32vpv3511gjdcdn63就是C中的"PHPSESSID=0iako1eum32vpv3511gjdcdn63; path=/; domain=pass.local.dayoo.com",我只不过贪测试方便,先把ID那出来测试