[PHP]Probleem met file_get_contents en cookies.

Pagina: 1
Acties:

Onderwerpen


  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05 17:51
Ik probeer via file_get_contents de inhoud van een ander bestand terug te krijgen. Het probleem is dat dat ander bestand cookies verwacht.

Op php.net staat dat je dan een streaming context mee moet geven. Dat heb ik dus gedaan:

PHP:
1
2
3
4
$opts = array('http' => array('method' => 'GET', 'header'=> 'Cookie: ' . $_SERVER['HTTP_COOKIE']."\r\n"));
$context = stream_context_create($opts);

echo "Gebruiker ingelogd: " . file_get_contents('http://domein.nl/test.php', false, $context);


Echter krijg ik dan een 404 foutmelding terug. Zonder die streaming context, werkt het wel gewoon, alleen krijg ik niet de juiste info terug.

De streaming context options ziet er zo uit:

array(1) {
  ["http"]=>
  array(2) {
    ["method"]=>
    string(3) "GET"
    ["header"]=>
    string(243) "Cookie: 1322716608938bafe7175a1abeec49d6=cde702426e2bddf5f2d54143598be085; 1f7df61a5c1813a127cc9224cb779004=e68290a8163f014b561e346d5f014fb9; 794dae82d4bda24554ac9015e726271c=7a3f79b6a7eb24279f1edf02e733d4bd1240f19cc87bd424a07329faf184079262
"
  }
}


Ik heb al gezocht op google, maar daar zeggen ze allemaal dat je curl moet gebruiken, echter is dat niet geïnstalleerd.

Heeft iemand hier een idee?

[ Voor 0% gewijzigd door compufreak88 op 20-11-2008 21:15 . Reden: pre tags toegevoegd ]


  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
Een ander alternatief voor file_get_contents en curl is het gebruik van een http socket. Ik heb lange tijd een website gehost gehad waarop zowel file_get_contents als curl niet gebruikt konden worden en heb het probleem toen met sockets opgelost.

Sockets zijn niet de meest eenvoudige materie in vergelijking met file_get_contents en curl, maar het is een optie.

Zelf gebruik ik zowiezo altijd curl voor het opvragen van een extern bestand en ik weet zo niet een goed antwoord op je specifieke vraag. Ik zal zo even kijken of ik er niettemin uit kan komen.

edit:
Ik heb zojuist je code getest en bij mij schijnt het naar behoren te werken. Ik heb toch wel een idee dat ik weet waar het mis gaat.
PHP:
1
$opts = array('http' => array('method' => 'GET', 'header'=> 'Cookie: ' . $_SERVER['HTTP_COOKIE']."\r\n"));

Wat voor cookie je mee wilt sturen weet ik niet, maar het lijkt me onwaarschijnljik dat je met $_SERVER['HTTP_COOKIE'] de juiste informatie meestuurt. Je stuurt nu exact de cookies door die de browser bij de request bevat. Zijn deze wel te vertrouwen? Waarom dat overigens in een 404 resulteert weet ik niet.

[ Voor 145% gewijzigd door doeternietoe op 20-11-2008 21:59 ]


  • Cartman!
  • Registratie: April 2000
  • Niet online
En een host zoeken die wel curl heeft geen optie? Het gaat je een hoop ellende besparen volgens mij...

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
bericht hierboven geüpdate btw.

Als je toegang hebt tot de server waar je de gegevens vandaan haalt, kijk dan eens of je daar de exacte request-header kunt krijgen. Dat kan met behulp van je .htaccess ook bij een 404.

[ Voor 81% gewijzigd door doeternietoe op 20-11-2008 22:05 ]


Acties:
  • 0 Henk 'm!

  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05 17:51
doeternietoe schreef op donderdag 20 november 2008 @ 21:27:

edit:
Ik heb zojuist je code getest en bij mij schijnt het naar behoren te werken. Ik heb toch wel een idee dat ik weet waar het mis gaat.
PHP:
1
$opts = array('http' => array('method' => 'GET', 'header'=> 'Cookie: ' . $_SERVER['HTTP_COOKIE']."\r\n"));

Wat voor cookie je mee wilt sturen weet ik niet, maar het lijkt me onwaarschijnljik dat je met $_SERVER['HTTP_COOKIE'] de juiste informatie meestuurt. Je stuurt nu exact de cookies door die de browser bij de request bevat. Zijn deze wel te vertrouwen? Waarom dat overigens in een 404 resulteert weet ik niet.
Je moet ingelogd zijn om bij die informatie te kunnen komen. Daarom moeten die cookies worden meegestuurd. Het zijn dus sessioncookies die ik probeer mee te sturen.

Ik heb wel toegang tot de server waar dit op moet draaien, maar die is niet van mij. Ik bepaal dus ook niet op welke host hij staat.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

compufreak88 schreef op vrijdag 21 november 2008 @ 06:44:
Je moet ingelogd zijn om bij die informatie te kunnen komen. Daarom moeten die cookies worden meegestuurd. Het zijn dus sessioncookies die ik probeer mee te sturen.
Dit kan ik niet rijmen. De gebruiker is ingelogd op jouw server, maar die sessionID heeft geen enkele betekenis voor de andere server, tenzij je daar iets voor geschreven hebt, maar dan nog zal deze zeer waarschijnlijk een andere sessionID gebruiken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels


Acties:
  • 0 Henk 'm!

  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05 17:51
Het is eigenlijk een work-around voor een ander probleem waar ik anders niet uitkom. Ik wil weten welke gebruiker er is ingelogd in Joomla.

Ik gebruik Kohana, en daarin wil ik weten welke gebruiker op het moment is ingelogd. Het probleem is dat ik in dat framework niet het sessiecookie krijg. En het inladen van het joomla framework werkt ook niet, omdat zij gebruik maken van allemaal global waarden, die dus vanuit mijn framework niet global gedefinieerd worden.

Ik heb een apart bestand gemaakt die de gebruiker echo'ed. Nu probeer ik dat dus vanuit mijn framework op te halen, maar dat eerste bestand heeft wel die sessioncookie nodig.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Probeer nu eens duidelijk uit te leggen welke software op welke server draait en op welke server die gebruiker ingelogd is en wat met wat verbinding maakt.

Het punt is dat je van buitenaf nooit die gegevens zomaar kunt kijken. Een sessieCookie is niks meer dan een labeltje waar allemaal enkel voor de applicatie toegankelijke gegevens aan hangen.

Daarnaast is een browser zo slim om die labeltjes alleen door te geven aan de site waar ze bij horen. De cookies die je op je eigen server ziet hebben dus geen enkele betekenis voor de applicaties die op die andere server draait, en de cookies die de gebruiker van die andere server heeft kun jij nooit zien.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05 17:51
Janoz schreef op vrijdag 21 november 2008 @ 10:14:
Probeer nu eens duidelijk uit te leggen welke software op welke server draait en op welke server die gebruiker ingelogd is en wat met wat verbinding maakt.

Het punt is dat je van buitenaf nooit die gegevens zomaar kunt kijken. Een sessieCookie is niks meer dan een labeltje waar allemaal enkel voor de applicatie toegankelijke gegevens aan hangen.

Daarnaast is een browser zo slim om die labeltjes alleen door te geven aan de site waar ze bij horen. De cookies die je op je eigen server ziet hebben dus geen enkele betekenis voor de applicaties die op die andere server draait, en de cookies die de gebruiker van die andere server heeft kun jij nooit zien.
Alles draait op dezelfde server. De applicatie die ik maak draait in een wrapper van joomla. Dat is dus een aparte applicatie.

Maar vanuit die applicatie moet ik weten welke gebruiker er is ingelogd. Ik heb al van alles geprobeerd om vanuit mijn framework het Joomla framework te laden, alleen dat krijg ik met geen mogelijkheid voor elkaar (ivm global vars die joomla gebruikt). Vanuit een nieuw bestand werkt het echter wel, zonder problemen.

Omdat ik hier al een hele poos mee bezig ben, probeer ik het af te ronden. Vandaar dat ik voor deze nogal smerige oplossing kies.

Acties:
  • 0 Henk 'm!

  • kaneter
  • Registratie: Juni 2007
  • Laatst online: 05-08 13:27
Het lijkt me dat je dan gewoon toegang hebt tot de cookies. Doe eens var_dump($_SESSION); in je applicatie.

Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 21:26
Die hele constructie met $_SERVER['HTTP_COOKIE'] doorsturen gaat natuurlijk geen zier helpen als de pagina van je eigen framework de sessie van joomla niet kent. Hij weet òf de naam en de inhoud òf geen van beiden. Blijkbaar in dit geval geen van beiden. De reden dat de sessie niet beschikbaar is in jouw framework is een beetje gokken.

- De path van de cookie is niet toegankelijk voor je framework. Een cookie met het pad /folderA is niet beschikbaar vanuit een script dat draait in /folderB. Het ingebouwde sessiebeheer van PHP kiest echter normaalgesproken voor /, dus dan zou dit niet het probleem moeten zijn.
- Joomla draait op een ander (sub)domein als je framework. Het kan òòk het verschil zijn tussen www.domein.tld en domein.tld (het subdomein www)
- Joomla heeft een eigen sessiebeheer. Het is mogelijk om het sessiebeheer van PHP functies van de gebruiker te laten gebruiken. De ingebouwde functionaliteit van PHP wordt overschreven. Of Joomla dit doet weet ik niet, want ik gebruik zelf nooit Joomla.

De client side gegevens over je sessioncookie (path, (sub)domain kun je allemaal uitzoeken mbv Web Developer Toolbar van Firefox.
Pagina: 1