我的帐户系统位于accounts.example.com
。
当用户通过accounts.example.com
登录时,会话ID将保存在.example.com
(在所有子域中)可用的cookie中
subdomain.example.com
在另一台服务器中,它无权访问会话数据和帐户系统的数据库。我如何检查用户是否登录是获得会话ID(因为它在所有子域中都可用)。然后,我将带有会话ID和密码(用于保护HTTP请求的密码)的HTTP请求发送到帐户服务器。
来自subdomain.example.com
的HTTP请求如下。
$sessionId = $_COOKIE[$sessionCookieName];
$post = http_build_query(
array (
'http_secret' => AUTH_HTTP_SECRET,
'session_id' => $sessionId
)
);
$opts = array('http' =>
array (
'method' => 'POST',
'user_agent' => $_SERVER['HTTP_USER_AGENT'],
'content' => $post
)
);
$context = stream_context_create($opts);
$url = 'https://account.example.com/check-login';
$response = @file_get_contents($url , false, $context);
因此,HTTP请求将发送到accounts.example.com/check-login
。
check-login.php
的 accounts.example.com
如下。
$httpSecret = $_POST['http_secret'];
// if it is from an invalid client
if ($httpSecret !== HTTP_SECRET) {
throw new Exception('HTTP Error');
}
$sessionId = $_POST['session_id'];
# set the session ID
session_id($sessionId);
# then, I get the session data and checks if the user is logged in
如果用户已登录,我会将与帐户相关的数据返回到subdomain.example.com
。
这种方法是好是坏?
谢谢。
答案 0 :(得分:-1)
其中没有安全漏洞。这就是您首先拥有该功能的原因之一。
如果您要检查代码,请尝试https://codereview.stackexchange.com/
答案 1 :(得分:-2)
否,它不安全,您应该为此使用HTTPS。