[PHP] instandhouding sessie via fopen?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Ik zit met de volgende situatie:

Ik ben de frontend van een zoekmachine aan het bouwen. Deze bestaat uit 2 PHP scripts: index.php en search.php.

index.php doet niets meer dan een bijna lege XML file transformen met XSLT, hetgeen resulteert in een Google achtige pagina met een formpje erop. Na het submitten van het formuliertje wordt index.php wederom aangeroepen en staan de resultaten daar, verdeeld over meerdere pagina's.

search.php maakt een SOAP-call naar een andere server die het eigenlijke zoekwerk verricht. deze voert de query eenmalig uit, en geeft een referentie naar de query terug. door een volgende SOAP-call, waarin ik de referentie opgeef, samen met een $start en een $end, kunnen een x aantal resultaten worden teruggegeven. op deze manier hoeft niet voor elke resultaten-pagina de database-query opnieuw worden uitgevoerd. search.php geeft de resultaten terug als XML.

de resultaten van search.php worden dynamisch in de XML tree geladen dmv de XSLT functie document('http://host/search.php?q=blaat&start=25'). Ik gebruik Sablotron, dus ik heb een scheme handler gemaakt voor http, die mbv fopen() search.php opent en netjes de XML file teruggeeft tijdens het XSLT proces.

het probleem is nu, dat search.php de query-reference moet onthouden wanneer een gebruiker naar een volgende pagina van resultaten gaat, zodat niet de query opnieuw hoeft worden uitgevoerd, maar slechts een deel van de result-set moet ophalen van een query die al gedaan is (noot: hoe dat allemaal aan de andere kant van de SOAP verbinding gaat weet ik niet, ik weet alleen dat ik op deze manier te werk moet gaan)

ik dacht dus wel even handig van sessies gebruik te kunnen maken. niets is echter minder waar. bij elke fopen(phpurl) wordt doodleuk een nieuwe sessie gemaakt, php weet niet dat het request viavia uit dezelfde sessie komt. als ik handmatig het session id doorpass in de url die ik met fopen aanroep, krijg ik een HTTP request failed.

is er een manier om zodanig met fopen (of fsockopen) om te gaan op zo'n manier, dat php 'denkt' dat zowel m'n normale requests als m'n requests die vanuit een normale request via f(sock)open gaan, tot dezelfde sessie behoren?

ik weet overigens zeker dat hier het probleem ligt, want als ik search.php gewoon vanuit m'n browser aanroep gaat het wel goed qua sessies...

Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
nou op zich lijkt het me wel aardig als er nog iemand een antwoord op heeft, maar ik heb het inmiddels allemaal wat simpeler aangepakt en dat werkt wel.

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Genoil schreef op 23 december 2003 @ 10:25:
nou op zich lijkt het me wel aardig als er nog iemand een antwoord op heeft, maar ik heb het inmiddels allemaal wat simpeler aangepakt en dat werkt wel.
Vermeld anders voor de archieven nog even hoe je het nu opgelost hebt? :z

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
nouja zoals ik al zei had ik een tamelijk lege bron-xml voor de searchpagina, waar eigenlijk niets instond. dus ipv die heb ik gewoon maar de output van search.php in index.php gehangen (gewoon code gecopypaste, niks fopen), en die als bron xml genomen. waarom moeilijk doen als het makkelijk kan :)

het probleem blijft wel bestaan als je cocoon achtige dingen wilt gaan doen met een sitemap met daarin meerdere onafhankelijke dynamische xml bronnen in 1 request en je kiest ervoor dat op mijn manier op te lossen (het kan met sablotron evt ook anders, maar lang niet zo fraai).

[ Voor 3% gewijzigd door Genoil op 23-12-2003 11:56 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Mischien dat dit niet klopt?

code:
1
2
3
document('http://host/search.php?q=blaat&start=25')
=>
document('http://host/search.php?q=blaat&start=25')


mischien dat het daardoor fout gaat. ik heb ook wel een problemen gehad met entiteiten, ik weet alleen niet zo snel meer waar.

Maar je kunt dus alle waardes mee geven die je wilt, behalve de session ID? lijkt me een beetje vreemd. Anders moet je op een of andere manier zelf een sessie systeem schrijven (geen idee hoe, maar goed).

[ Voor 44% gewijzigd door Michali op 23-12-2003 14:06 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Michali schreef op 23 december 2003 @ 14:04:
Mischien dat dit niet klopt?

code:
1
2
3
document('http://host/search.php?q=blaat&start=25')
=>
document('http://host/search.php?q=blaat&start=25')


mischien dat het daardoor fout gaat. ik heb ook wel een problemen gehad met entiteiten, ik weet alleen niet zo snel meer waar.

Maar je kunt dus alle waardes mee geven die je wilt, behalve de session ID? lijkt me een beetje vreemd. Anders moet je op een of andere manier zelf een sessie systeem schrijven (geen idee hoe, maar goed).
ja er moet idd wel & staan ipv &, maar dat had ik wel goed.

ik heb wel een vermoeden waarom de http request failed. dit omdat de session-id die ik meestuur, die van de sessie is die is gestart vanuit index.php en gekoppeld is aan m'n browsersessie. Als PHP vervolgens geconfronteerd wordt met deze id, terwijl deze wordt aangeroepen vanuit een andere client (nl. PHP zelf), kan ik me voorstellen dat het fout gaat.

dit is echter wel de manier waarop het zou moeten werken. als ik voor search.php slechts 1 sessie zou hebben, zouden aanroepen daarop vanuit verschillende index.php requests met elkaar gaan conflicteren.

anyway ik ben veel blijer met m'n simpele oplossing :).

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Je bedoelt dus dat een sessie maar voor een process (oid) tegelijk gebruikt kan worden. Dat zou best wel mogelijk zijn. Hoe heb je het dan eigenlijk opgelost? Daar ben ik ook wel benieuwd naar.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Michali schreef op 23 december 2003 @ 15:17:
Je bedoelt dus dat een sessie maar voor een process (oid) tegelijk gebruikt kan worden. Dat zou best wel mogelijk zijn. Hoe heb je het dan eigenlijk opgelost? Daar ben ik ook wel benieuwd naar.
Nou zoals ik al gepost had heel simpel:

ik had eerst 1 statische xml file en 1 dynamische, waarbij het tijdens het processen van de statische, de dynamische werd ingeladen, hetgeen dus mijn probleem veroorzaakte.

toen zag ik ineens dat ik die statische xml file helemaal niet nodig had, dus gebruik ik nu gewoon de de dynamische als "base"-xml bestand. de code van search.php die de dynamische xml opleverde, heb ik dus simpelweg verhuisd naar index.php. en die index.php kan wel gewoon normaal z'n sessie behouden.

eigenlijk dus niet echt een oplossing, maar een work-around die achteraf veel efficienter bleek...
Pagina: 1