Ich habe meinen bisherigen Lösungsansatz nochmals bisschen überdacht, da ich aktuell die Cookies serverseitig in einer .txt-Datei zwischenspeicher und dachte mir, dass das Ganze ja auch Clientseitig möglich ist und vermutlich auch sinnvoller ist oder?
Ich habe aus diesem Grund in meiner Klasse für das Proxyskript in der Funktion
curl_get_page() noch den HTTP Header aus der cURL Session mit eingebaut, wo ich dann die Cookies auslese und direkt mit setcookie(...) setze:
class server
{
...
private $url;
private $content;
private $cookies;
private $header;
private $body;
function __construct($do)
{
if (...) {
...
} elseif (...) {
...
} else {
if (strpos($_SERVER['QUERY_STRING'], '?')>=1) {
$arr = explode('?', $_SERVER['QUERY_STRING']);
$query = $arr[1];
$arr = explode('=', $arr[0]);
$url = $arr[1];
$this->url = isset($_SERVER["https"]) ? 'https' : 'http' . '://' . $_SERVER['HTTP_HOST'] . $url . '?' . $query . "&attached";
} else {
$this->url = isset($_SERVER["https"]) ? 'https' : 'http' . '://' . $_SERVER['HTTP_HOST'] . $do . "?attached";
}
}
}
function curl_get_page() {
$cookieFile = 'cookies.txt';
if(!file_exists($cookieFile)) {
$fh = fopen($cookieFile, "w");
fwrite($fh, "");
fclose($fh);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->url); // Define target site
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Return page in string
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile); // Tell PHP/CURL where to write cookies
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile); // Tell PHP/CURL which cookies to send
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id());
switch($_SERVER['REQUEST_METHOD']) {
case 'GET':
curl_setopt($ch, CURLOPT_HTTPGET, TRUE);
break;
case 'POST':
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
break;
}
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); // Follow redirects
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
$this->content = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$this->header = substr($this->content, 0, $header_size);
$this->body = substr($this->content, $header_size);
preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $this->header, $matches);
$cookies=array();
foreach ($matches[1] as $item) {
parse_str($item, $cookie);
$cookies = array_merge($cookies, $cookie);
}
foreach ($cookies as $key => $value) {
setcookie($key, $value, time()+3600);
}
curl_close($ch);
}
...
}
if (isset($_GET["do"])) {
$wa = new server($_GET["do"]);
$wa->curl_get_page();
echo $wa->get_body();
} else {
...
}
Wenn ich jetzt im Browser wie bspw. Google Chrome mir die Cookies auf dem Login zum Adminbereich anzeigen lasse, werden mir hier auch die entsprechenden Cookies angezeigt wie bei einem direkten Aufruf des Logins. Allerdings beim versuchten Anmeldevorgang mir gesetzten Cookies von WordPress nicht erkannt werden.
Kann es sein, dass hier in der nächsten cURL-Session, da ich ja die ausgelesenen Cookies nur in der vorherigen cURL-Session mit setcookie im Proxyskript setze, diese gesetzten Cookies nicht mitgesandt werden?
Vielen Dank und beste Grüße,
Leon