我想了解如何在PHP中销毁特定的会话。通过合作伙伴网站,用户使用令牌登录主网站,并获得完整的会话。
如果用户从合作伙伴网站注销,合作伙伴网站也可以调用破坏功能。然后我们还应该注销我们自己的用户。
最好的方法是什么?Zend_Session 方法不接受参数,类似地,PHP函数Zend_Session也不接受参数。
我正在考虑两种选择:
还是有第三种/更好的方法我没有看到?
发布于 2011-07-18 08:14:11
如果您希望能够“踢”用户的会话,那么唯一能做到的方法就是使用MySQL (甚至是其他db、sqlite )来存储会话。
然后,您可以简单地从数据库中删除条目来终止会话。
这也允许您做一些事情,例如,“控制”特定用户的会话和其他事情:)
下面是一个非常基本的运行过程:http://www.devshed.com/c/a/MySQL/Custom-Session-Management-Using-PHP-and-MySQL/ (不是最好的示例,但足够好的完整示例来启动您)。
编辑
另外,如果通过合作伙伴站点登录,我过去使用过的另一种方法(与O2和其他类似站点一起使用)给了他们一个‘回调’(在大多数情况下是REST调用),当用户注销他们的站点时,他们也需要调用这个回调。
发布于 2011-07-18 12:37:02
不需要你自己的会话处理。
session_id()可以接受一个参数,即要使用的会话id。
因此,当您将用户传递到合作伙伴站点时,传递他们的session_id (或一些标记,或其他什么)。
然后,允许合作伙伴站点按下如下脚本:
kill-user-session.php
<?php
/**
* Destroy any active session identified by $_POST['sid']
*/
session_id($_POST['sid']);
session_start(); //this line may not even be necessary
session_destroy(); //destroys that session.因此,当用户登录到合作伙伴站点时,合作伙伴站点将session_id (您给他们的)发布到您的杀死用户会话脚本,并且用户的会话在您的服务器上被销毁。
当然,您可能希望通过某种方法限制对杀害用户session.php的访问。
发布于 2011-07-18 08:25:54
数据库解决方案意味着会话数据库需要在主站点和合作伙伴站点之间共享,而这种情况通常不是这样的。
<img src="mainwebsite/logout.php">mainwebsite/logout.php:
<?php session_destroy(); ?>https://stackoverflow.com/questions/6730123
复制相似问题