Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP在一个域中登录,然后在另一个域中使用会话_Php_Session - Fatal编程技术网

PHP在一个域中登录,然后在另一个域中使用会话

PHP在一个域中登录,然后在另一个域中使用会话,php,session,Php,Session,所以我有这个变量,我必须发送到另一个网站。如何以用户无法更改的方式发送?对于登录会话,它就像一个帐户id,因为用户通过Steam登录,他不需要输入密码(至少在站点上)。我需要将他的帐户id安全地传递到另一个域。我的意思是,我不在乎他是否看到它,只要他无论如何都不能改变它。有没有办法做到这一点? 我不能让他们直接登录第一个网站的原因是因为steam已经标记了它,就像它对很多有ref代码的网站所做的那样。因此,用户无法登录,因为警告中的“continue anyways”按钮太小,以至于许多用户甚至

所以我有这个变量,我必须发送到另一个网站。如何以用户无法更改的方式发送?对于登录会话,它就像一个帐户id,因为用户通过Steam登录,他不需要输入密码(至少在站点上)。我需要将他的帐户id安全地传递到另一个域。我的意思是,我不在乎他是否看到它,只要他无论如何都不能改变它。有没有办法做到这一点?
我不能让他们直接登录第一个网站的原因是因为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:
  • 例如:

我将研究如何使用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:
  • 例如:

我考虑将带有帐户id的post请求发送到第一个网站的索引,然后设置会话。但我不确定它是否安全,或者用户是否可以操纵数据。我曾考虑将带有帐户id的post请求发送到第一个网站的索引,然后设置会话。但我不确定它是否安全,或者用户是否可以操纵数据。我不太了解第一个选项,origin.com是否是steam上被列入黑名单的主要站点?是的,所有未列入黑名单的域所做的就是将请求转发给steam,并以您喜欢的方式回复。您甚至可以将整个文本、json、xml、html响应发送回黑名单站点进行处理。有效地充当代理。我不知道如何在steam登录系统上实现。你知道这个系统是如何工作的吗?当你点击“登录”按钮时,你会被重定向到steam,当你登录后,你会被重定向到你的网站。单击登录按钮时,将显示steam警告。因此,我认为这不会起作用。我熟悉steam web API和OpenID,并且在过去创建了一个个人Wordpress插件,允许网站成员使用steam帐户登录并导入他们的个人资料数据。CURL用于方便按钮按下和个人资料/游戏数据检索。因此,您上面的代码无法解决我的问题,因为当用户单击“登录”时,问题就出现了。。。但我在想,如果我用curl将账户id从未列入黑名单的网站发布到主网站,用户是否能够拦截并更改它?我不太清楚第一个选项,origin.com会是steam上被列入黑名单的主网站吗?是的,非黑名单域所做的就是将请求转发给steam,