Autor Zpráva
curo
Profil
Používam remote include napr: include "http://www.example.com/xx.php?a=1"
Máte niekto skúsenosti ako to je s cookies v týchto "vzdialených" skriptoch?
Yuhů
Profil
to záleží na tom, jakým způsobem si tvůj server o dokument na example.com řekne. Myslím, že to normálně dělá GETem. Pokud chceš, aby vzdálený server vyhodnocoval cookie, tak to cookie musíš dát v požadavku. Ale nevím, jak.
llook
Profil
Když includuješ vzdálený soubor přes HTTP, tak je to opravdu tak, jak předpokládá Yuhů. Stejně jako když otevíráš přes HTTP funkcí fopen. Pošle se HTTP/1.0 požadavek GET a includuje se odpověď.
Řešit to lze mnoha způsoby, podle situace. Pokud bych chtěl načíst vzdálený soubor a předat mu předtím moje vlastní cookies, tak bych to udělal zhruba takhle:
<?php
/* Spojení se serverem */
$fp = fsockopen('www.example.com', 80);
/* Poslání požadavku */
fwrite($fp, "GET /xx.php?a=1 HTTP/1.0\r\nHost: [url=http://www.examle.com\r\n");
]www.examle.com\r\n");
[/url]
// Cookie: NAME1=OPAQUE_STRING1; NAME2=OPAQUE_STRING2 ...
if (count($_COOKIE) > 0) {
fwrite($fp, 'Cookie: ');
foreach($_COOKIE as $name => $value) {
fwrite($fp, $name.'='.$value.'; ');
}
fwrite($fp, "X=Y\r\n");
}
fwrite($fp, "User-Agent: llook :-)\r\n\r\n");
/* Zobrazení doslovné odpovědi */
while (!feof($fp)) {
echo(fread($fp, 1024));
}
?>

Z té odpovědi by bylo asi většinou ještě nutné odstranit hlavičky, k tomu je dobré vědět, že hlavička končí sekvencí "\r\n\r\n".
curo
Profil
Díky,
a ešte jedna otázočka:
Dovolí prehliadač uložiť cookie, ktoré nastaví ten vzdialený skript (s domain volajúceho skriptu)?
Wan-To
Profil *
Myslím, že by měl.
Lemur
Profil *
Jak který, IE asi ano, u Mozily/Firefoxu jde nastavit, jestli se mohou nastavovat cookies cizích serverů. Já osobně to mám vypnuté.
llook
Profil
Ale ne, na prohlížeči opravdu nezáleží. Prohlížečem je pro nás v tomto případě ten skript, který soubor stahuje a zobrazuje. Takže ne.
Ale ten skript může ta cookies zjistit z odpovědi a sám odeslat.
Nějak takhle by se upravil ten konec (možná v tom mám chyby):

while (!feof($fp)) {
$file .= fread($fp, 1024);
}
$doc_pos = strpos($file, "\r\n\r\n");
$headers_text = substr($file, 0, $doc_pos - 1);
$document = substr($file, $doc_pos);
$headers_lines = explode("\r\n", $headers_text);
foreach($headers_lines as $line) {
$name = ereg_replace(':.*$', '', $line);
$value = ereg_replace('[^:]+:', '', $line);
if (ereg('set-cookie', $name)) {
header($name.':'.$value);
}
}
Toto téma je uzamčeno. Odpověď nelze zaslat.