假设我们有两个网站example.com& example.net在不同的域名中。这两个站点的用户数据是相同的,因此我们可以使用相同的用户ID和密码登录这两个站点。
当用户点击example.com上的注销按钮时,我们还必须从example.net注销它们。这两个站点都是打开的,并在同一浏览器上登录(在不同的选项卡上)。
当用户从example.com注销时,是否可以销毁example.net的会话cookie?
答案 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环境中。当一个站点获得登录请求时,在内部使用给定的用户名和密码登录到另一个站点。
示例代码适用于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
}
如果您查看Drupal网站API以获取有关drupal_http_request方法的更多信息。
希望这可以帮助您在您的环境中使用PHP编程技巧。
答案 3 :(得分:-1)
我会尝试使用在数据库中存储数据的会话处理。