簡體   English   中英

PHP在一個域中登錄,然后在另一個域中使用會話

[英]PHP login in one domain then using the session in another one

因此,我必須將此變量發送到另一個網站。 如何以用戶無法更改的方式發送它? 就像帳戶ID一樣,對於登錄會話,由於用戶通過Steam登錄,因此他不需要輸入密碼(至少在站點上)。 我需要將他的帳戶ID安全地傳遞到另一個域。 我的意思是,只要他無論如何都無法更改,我不在乎他是否會看到它。 有什么辦法嗎? 我之所以不能讓他們直接在第一個網站上登錄,是因為Steam對其進行了標記,就像許多具有引用代碼的站點所做的那樣。 因此,用戶有點無法登錄,原因是警告中的“仍然繼續”按鈕很小,以至於許多用戶甚至看不到它。 因此,我像大型網站一樣,購買了另一個域,然后將登錄重定向到該域。 此其他站點未列入黑名單,因此登錄可以正常進行。

這個問題似乎有點挑戰,我的意思是我將通過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; 

authenticator.com/authenticate-user.php

 //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而不是會話。 通過允許CORSXMLHttpRequest (ajax)在API處理器中允許Cookie,可以跨域共享Cookie。 但是,通過XMLHttpRequest發送的任何內容都可以由用戶停止和操縱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM