如何同时从两个网站注销 - PHP会话处理

时间:2011-12-06 06:38:08

标签: php session

假设我们有两个网站example.com& example.net在不同的域名中。这两个站点的用户数据是相同的,因此我们可以使用相同的用户ID和密码登录这两个站点。

当用户点击example.com上的注销按钮时,我们还必须从example.net注销它们。这两个站点都是打开的,并在同一浏览器上登录(在不同的选项卡上)。

当用户从example.com注销时,是否可以销毁example.net的会话cookie?

4 个答案:

答案 0 :(得分:2)

由于这两个站点之间没有共享任何登录信息,因此两者都保持独立的会话数据,并且您无法修改其他网站的会话数据。

解决方案是编写一个与其他网站通信的API,以销毁会话数据。

示例:

标签1 :打开“示例。 com ”并以“alice”身份登录

标签2 :打开“示例。 net ”并以“alice”身份登录

--- 现在,要进行“相互注销”,请执行以下操作。 ---

当您点击标签1( .com 域)中的“退出”时,它应该转到:

同样,当您点击标签2( .net 域)中的“注销”时,它应该转到:

我认为这对你来说很清楚。

答案 1 :(得分:0)

您需要有一个跟踪用户会话的中间网站或网络服务,即abc.com和xyz.com网站共有的内容 从这两个站点,您可以在每个修复时间内获得ajax请求,以检查中间服务的用户会话的有效性。如果用户在任何一个站点中注销会话将会销毁。因此,当来自其他站点的ajax请求检查它将获得关闭会话,因此您在代码中写入以销毁cookie或任何您想要它做的事情。

答案 2 :(得分:0)

以下是我在Drupal中的表现。如果您使用任何CMS,那么将有一种特定的方法来实现,但核心结构是相同的,以支持它在PHP环境中。当一个站点获得登录请求时,在内部使用给定的用户名和密码登录到另一个站点。

  • 首先登录该网站并获取cookie tokes等以继续处理与用户要求相关的其他内容。

示例代码适用于Drupal CMS。您可以了解它的工作原理及其功能,然后将相关部分复制到您的环境中工作。

// Build request data
$user_login_method = 'POST';
$user_login_retry = 0;
$post_data = array('username' => trim($username), 'password' => trim($password));
$user_login_data = http_build_query($post_data, null, '&');

// Send a request with the data to other site
$login_request = drupal_http_request($other_site_login_url, $user_login_headers, $user_login_method, $user_login_data, $user_login_retry);

// Look for set cookie header value in the response
if(isset($login_request->headers['Set-Cookie'])) {
// Set the cookie name and do the rest based on values
}
  • 其次是调用其他站点的注销URL来注销用户。请记住,您必须使用登录呼叫时返回的cookie值,但如果您从登出页面拨打ajax呼叫到其他站点,则无法解决问题。

如果您查看Drupal网站API以获取有关drupal_http_request方法的更多信息。

希望这可以帮助您在您的环境中使用PHP编程技巧。

答案 3 :(得分:-1)

我会尝试使用在数据库中存储数据的会话处理。