php重定向和登录

php重定向和登录,php,redirect,curl,post,Php,Redirect,Curl,Post,我对php比较陌生,但正在尝试从我的应用程序重定向并登录到外部url。我有证书,并试图发布它们,但我真正能做到的是“成功”。如果我通过laravel的->redirect()或header(location:blah.php)进行重定向,我会得到一个错误,即没有发送我的凭据。到目前为止,我已经尝试使用卷曲和口吻。是否有传递登录凭据的重定向的工作示例 尝试1: $client = new Client(array('curl' => array(CURLOPT_SSL_VERIFYPEER

我对php比较陌生,但正在尝试从我的应用程序重定向并登录到外部url。我有证书,并试图发布它们,但我真正能做到的是“成功”。如果我通过laravel的->redirect()或header(location:blah.php)进行重定向,我会得到一个错误,即没有发送我的凭据。到目前为止,我已经尝试使用卷曲和口吻。是否有传递登录凭据的重定向的工作示例

尝试1:

$client = new Client(array('curl' => array(CURLOPT_SSL_VERIFYPEER => false)));

        $url = "url.php";
        $data = array('email' => 'user@email.com', "pass" => 'pass' );
        $data_string = json_encode($data);

        $res = $client->post($url, [ 'body' => $data_string ]);
        $code = $res->getStatusCode();

        if($code == '200'){
            $this->redirect($url);

           // return redirect()->away($url);
        } else {
            return redirect('/register')
    }
尝试2:

$POSTFIELDS = json_encode($data);
$cookie_file_path = "cookie.txt"; 
$fp = fopen($cookie_file_path,'w');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$POSTFIELDS);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
$result = @curl_exec ($ch);

if($result) {
    header("Location: url.php");
}

curl_close ($ch);

用户在当前应用程序中保存数据的预期行为在注册时被添加到db中,然后这些凭据被传递到旧应用程序进行登录,在那里他们看到该页面,就好像他们在那里登录一样。

您需要进行会话。比如:

$cookies = curl_get_cookies($curl_handle);
$session_cookie = $cookies['PHPSESSID'];
session_set('PHPSESSID', $session_cookie);
<form id="auto-login" method="POST" action="<?PHP echo htmlentitites($url); ?>">
    <input type="hidden" name="email" value="<?PHP echo htmlentities('user@email.com'); ?>" />        
    <input type="hidden" name="pass" value="<?PHP echo htmlentities('pass'); ?>" />
</form>

<script>
$('#auto-login').submit();
</script>
或者,您可以生成一个自动发布HTML表单。比如:

$cookies = curl_get_cookies($curl_handle);
$session_cookie = $cookies['PHPSESSID'];
session_set('PHPSESSID', $session_cookie);
<form id="auto-login" method="POST" action="<?PHP echo htmlentitites($url); ?>">
    <input type="hidden" name="email" value="<?PHP echo htmlentities('user@email.com'); ?>" />        
    <input type="hidden" name="pass" value="<?PHP echo htmlentities('pass'); ?>" />
</form>

<script>
$('#auto-login').submit();
</script>

您需要进行会话。比如:

$cookies = curl_get_cookies($curl_handle);
$session_cookie = $cookies['PHPSESSID'];
session_set('PHPSESSID', $session_cookie);
<form id="auto-login" method="POST" action="<?PHP echo htmlentitites($url); ?>">
    <input type="hidden" name="email" value="<?PHP echo htmlentities('user@email.com'); ?>" />        
    <input type="hidden" name="pass" value="<?PHP echo htmlentities('pass'); ?>" />
</form>

<script>
$('#auto-login').submit();
</script>
或者,您可以生成一个自动发布HTML表单。比如:

$cookies = curl_get_cookies($curl_handle);
$session_cookie = $cookies['PHPSESSID'];
session_set('PHPSESSID', $session_cookie);
<form id="auto-login" method="POST" action="<?PHP echo htmlentitites($url); ?>">
    <input type="hidden" name="email" value="<?PHP echo htmlentities('user@email.com'); ?>" />        
    <input type="hidden" name="pass" value="<?PHP echo htmlentities('pass'); ?>" />
</form>

<script>
$('#auto-login').submit();
</script>

告诉我们您尝试了什么,输出是什么,预期输出是什么???@MASIDDIQUI,请参阅editsWell,这里有两个不同的会话。一个在用户和服务器之间,一个在服务器和旧应用之间。您需要将旧版应用程序中的会话cookie设置为您的用户会话。@DaanMeijer您是否可以编写eli5/psuedo代码?我已尝试在回答中提供有用的伪代码。希望它是清楚的:)那么我们看看你尝试了什么,输出是什么,你期望的输出是什么???@MASIDDIQUI,请看editsWell,这里有两个不同的会议。一个在用户和服务器之间,一个在服务器和旧应用之间。您需要将旧版应用程序中的会话cookie设置为您的用户会话。@DaanMeijer您是否可以编写eli5/psuedo代码?我已尝试在回答中提供有用的伪代码。希望清楚:)