首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何销毁特定的PHP会话

问如何销毁特定的PHP会话
EN

Stack Overflow用户
提问于 2011-07-18 08:04:58
回答 3查看 5.7K关注 0票数 2

我想了解如何在PHP中销毁特定的会话。通过合作伙伴网站,用户使用令牌登录主网站,并获得完整的会话。

如果用户从合作伙伴网站注销,合作伙伴网站也可以调用破坏功能。然后我们还应该注销我们自己的用户。

最好的方法是什么?Zend_Session 方法不接受参数,类似地,PHP函数Zend_Session也不接受参数。

我正在考虑两种选择:

  1. 直接从文件/memcache中删除会话信息,但希望采用“更干净”的方法。
  2. 在每个页面请求时检查是否是“令牌”用户;如果是“令牌”用户,则通过维护列表检查它们的令牌是否过期。这增加了繁忙网站的开销,但可能是我唯一的选择。

还是有第三种/更好的方法我没有看到?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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调用),当用户注销他们的站点时,他们也需要调用这个回调。

票数 1
EN

Stack Overflow用户

发布于 2011-07-18 12:37:02

不需要你自己的会话处理。

session_id()可以接受一个参数,即要使用的会话id。

因此,当您将用户传递到合作伙伴站点时,传递他们的session_id (或一些标记,或其他什么)。

然后,允许合作伙伴站点按下如下脚本:

kill-user-session.php

代码语言:javascript
复制
<?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的访问。

票数 4
EN

Stack Overflow用户

发布于 2011-07-18 08:25:54

数据库解决方案意味着会话数据库需要在主站点和合作伙伴站点之间共享,而这种情况通常不是这样的。

代码语言:javascript
复制
<img src="mainwebsite/logout.php">

mainwebsite/logout.php:

代码语言:javascript
复制
<?php session_destroy(); ?>
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6730123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档