PHP在一个域中登录,然后在另一个域中使用会话
所以我有这个变量,我必须发送到另一个网站。如何以用户无法更改的方式发送?对于登录会话,它就像一个帐户id,因为用户通过Steam登录,他不需要输入密码(至少在站点上)。我需要将他的帐户id安全地传递到另一个域。我的意思是,我不在乎他是否看到它,只要他无论如何都不能改变它。有没有办法做到这一点?PHP在一个域中登录,然后在另一个域中使用会话,php,session,Php,Session,所以我有这个变量,我必须发送到另一个网站。如何以用户无法更改的方式发送?对于登录会话,它就像一个帐户id,因为用户通过Steam登录,他不需要输入密码(至少在站点上)。我需要将他的帐户id安全地传递到另一个域。我的意思是,我不在乎他是否看到它,只要他无论如何都不能改变它。有没有办法做到这一点? 我不能让他们直接登录第一个网站的原因是因为steam已经标记了它,就像它对很多有ref代码的网站所做的那样。因此,用户无法登录,因为警告中的“continue anyways”按钮太小,以至于许多用户甚至
我不能让他们直接登录第一个网站的原因是因为steam已经标记了它,就像它对很多有ref代码的网站所做的那样。因此,用户无法登录,因为警告中的“continue anyways”按钮太小,以至于许多用户甚至看不到它。因此,我像大型网站一样,购买了另一个域名,并将登录重定向到该域名。另一个站点没有被列入黑名单,因此登录可以正常进行。这个问题似乎有点挑战性,我的意思是我会通过api请求来完成。一定是那样的。也许有人会对这项任务再加一点香料 但这是通过curl调用在两个域之间进行通信的方式,因此需要为其构建api。重定向是一个问题,可能是通过js ajax实现的
[编辑]将用户重定向到第二个站点(php标头),一旦进入第二个站点,就进行登录,即通过对第一个站点的curl请求来验证和填充会话变量。这个问题似乎有点挑战性,我的意思是我会通过api请求来完成。一定是那样的。也许有人会对这项任务再加一点香料 但这是通过curl调用在两个域之间进行通信的方式,因此需要为其构建api。重定向是一个问题,可能是通过js ajax实现的
[编辑]将用户重定向到第二个站点(php标头),一旦进入第二个站点,就进行登录,即通过对第一个站点的curl请求对会话变量进行身份验证和填充。我将研究使用curl进行身份验证,并从身份验证域获得一个响应,以便在源域上使用 origin.com/authenticate user.php
$ch = curl_init('http://authenticator.com/authenticate-user.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('steam_id' => $_SESSION['steam_id'])));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close ($ch);
$_SESSION['user_valid'] = $response;
//optional conditions to test origin or requesting source to prevent cross-site attacks.
if (isset($_POST['steam_id']){
//..validate user here
echo 1;
} else {
echo 0;
}
authenticator.com/authenticate user.php
$ch = curl_init('http://authenticator.com/authenticate-user.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('steam_id' => $_SESSION['steam_id'])));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close ($ch);
$_SESSION['user_valid'] = $response;
//optional conditions to test origin or requesting source to prevent cross-site attacks.
if (isset($_POST['steam_id']){
//..validate user here
echo 1;
} else {
echo 0;
}
这将使请求由服务器而不是客户端发送,并且用户不可更改。它还只需要您从一个域而不是两个域管理会话,因为身份验证器所做的只是处理发送给它的信息。
不确定为什么需要在身份验证域上设置会话,如果您可以给出一个场景,则需要设置会话。
您还可以根据需要更改响应,为整个网页提供服务
另一种选择是使用cookie,而不是会话。 通过
CORS
和XMLHttpRequest
(ajax),允许cookie在API处理器中跨域共享。
但是通过XMLHttpRequest
发送的任何内容都可以被用户停止和操作
- CORS PHP:
- 例如:
$ch = curl_init('http://authenticator.com/authenticate-user.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('steam_id' => $_SESSION['steam_id'])));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close ($ch);
$_SESSION['user_valid'] = $response;
//optional conditions to test origin or requesting source to prevent cross-site attacks.
if (isset($_POST['steam_id']){
//..validate user here
echo 1;
} else {
echo 0;
}
authenticator.com/authenticate user.php
$ch = curl_init('http://authenticator.com/authenticate-user.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('steam_id' => $_SESSION['steam_id'])));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close ($ch);
$_SESSION['user_valid'] = $response;
//optional conditions to test origin or requesting source to prevent cross-site attacks.
if (isset($_POST['steam_id']){
//..validate user here
echo 1;
} else {
echo 0;
}
这将使请求由服务器而不是客户端发送,并且用户不可更改。它还只需要您从一个域而不是两个域管理会话,因为身份验证器所做的只是处理发送给它的信息。
不确定为什么需要在身份验证域上设置会话,如果您可以给出一个场景,则需要设置会话。
您还可以根据需要更改响应,为整个网页提供服务
另一种选择是使用cookie,而不是会话。 通过
CORS
和XMLHttpRequest
(ajax),允许cookie在API处理器中跨域共享。
但是通过XMLHttpRequest
发送的任何内容都可以被用户停止和操作
- CORS PHP:
- 例如: