[PHP] Headers

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil het volgende voor elkaar krijgen, wat overigens ook al gedeeltelijk werkt.

Ik heb een zoekoptie op een bepaalde pagina, waarbij de zoekresultaten worden gecached, zodra de zoekresultaten in beeld staan.
De bedoeling is dat de gebruiker op een gegeven moment terug kan keren naar de zoekresultaten en de zoekresultaten worden dan nog steeds op het scherm getoond.
Dit werkt ook, alleen op een gegeven moment blijkt dat de cache volraakt, wanneer er meerdere zoekresultaten zijn uitgevoerd. Het lijkt net of de cache is volgeraakt.
Mijn vraag is hoe kan ik ervoor zorgen dat de cache wordt leeggemaakt wanneer er een nieuwe zoekopdracht wordt uitgevoerd.
Ik heb niet een duidelijke manier gevonden om dit te kunnen doen. Ik heb verschillende headerfuncties bekeken, maar heb niet het idee dat zij het juiste resultaat geven.

header("Cache: no-cache");

De website http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html heb ik ook bekeken, maar er zijn zoveel mogelijkheden dat ik door de bomen het bos niet meer zie.

Iemand enig idee?

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Kun je niks doen met Last-Modified en de Etag?

Je zou ook een cache versie op de server op kunnen slaan, en deze verwijzing b.v. in de sessievariabele knallen. Waarvoor is deze cache eigenlijk bedoeld, voor het verminderen van database queries of dataverkeer? Of beide? Vangt de browser back knop dit sowieso niet op?

[ Voor 74% gewijzigd door Noork op 10-02-2009 10:55 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 10 februari 2009 @ 10:47:
Dit werkt ook, alleen op een gegeven moment blijkt dat de cache volraakt, wanneer er meerdere zoekresultaten zijn uitgevoerd. Het lijkt net of de cache is volgeraakt.
Mijn vraag is hoe kan ik ervoor zorgen dat de cache wordt leeggemaakt wanneer er een nieuwe zoekopdracht wordt uitgevoerd.
Just to be sure: hebben we het over een server-side cache of client-side cache? Want browser-caches raken, doorgaans, niet 'vol'...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
RobIII schreef op dinsdag 10 februari 2009 @ 10:55:
[...]

Just to be sure: hebben we het over een server-side cache of client-side cache? Want browser-caches raken, doorgaans, niet 'vol'...
Ik vermoed dat hij wel de client kant bedoelt, maar dat een nieuwe zoekopdracht nog steeds de oude resultaten terug geeft o.i.d.

Acties:
  • 0 Henk 'm!

Verwijderd

Gezien TS over header-oplossingen begint is mijn vermoeden ook dat het gaat om caching bij de client. Echter lijkt me dat niet geheel logisch, enige opheldering over de precieze manier van caching en wat het probleem precies is zou wellicht handig zijn.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RobIII schreef op dinsdag 10 februari 2009 @ 10:55:
[...]

Just to be sure: hebben we het over een server-side cache of client-side cache? Want browser-caches raken, doorgaans, niet 'vol'...
Dit is de code die ik gebruik.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$page = new page();

header("Cache-Control: no-cache");

echo $page->no_expire();

//Onderstaande code staat vervolgens in de page-class

function no_expire()
{
    header("Expires: Thu, 31 Dec 2099 05:00:00 GMT");
    header("Last-Modified: Thu, 31 Dec 2099 05:00:00 GMT");
    header("Cache-Control: private");
    //header("Pragma: public"); 
}


Of dit clientside of serverside is weet ik niet, ben ik ook niet tegengekomen bij uitleg van 'header' op php.net.

Bij terugkeer op de zoekpagina, worden de zoekresultaten getoond. Bij klikken op de knop zoeken, wordt bovenstaande code uitgevoerd.

Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Verwijderd schreef op dinsdag 10 februari 2009 @ 11:05:
Of dit clientside of serverside is weet ik niet, ben ik ook niet tegengekomen bij uitleg van 'header' op php.net.
Wat denk je, aan de hand van de kennis wat een header is en doet, en hoe PHP werkt? Je stuurt met server-side code een response header naar de client... :)

(Je wilt geen cache, maar je pagina blijft tot 2099 geldig? ... vreemd)

[ Voor 8% gewijzigd door Zoijar op 10-02-2009 11:07 ]


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Dat is client side. Maar ik snap nog steeds niet waarom je aangeeft dat je de pagina moet cachen als je met een browser-back al terugkomt in de zoekresultaten?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik vind 't maar vreemde code; los van wat hierboven al gezegd wordt dat je pagina tot 2099 geldig blijft zie ik niet waarom je echo $page->no_expire(); zou doen. De echo zal niets echo-en omdat de header() functie dat zelf al doet... Dan vind ik het vreemd dat je geen idee hebt of het client- of serverside zit en zie ik je 2x een "cache-control" header zetten..

Ik zou eens even een stapje terug doen, diep ademhalen en dan opnieuw beginnen als ik jou was ;)

[ Voor 22% gewijzigd door RobIII op 10-02-2009 11:14 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Noork schreef op dinsdag 10 februari 2009 @ 11:08:
Dat is client side. Maar ik snap nog steeds niet waarom je aangeeft dat je de pagina moet cachen als je met een browser-back al terugkomt in de zoekresultaten?
Een browserback geeft aan: 'De webpagina is verlopen' als ik de header-functionaliteit niet toevoeg.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RobIII schreef op dinsdag 10 februari 2009 @ 11:12:
Ik vind 't maar vreemde code; los van wat hierboven al gezegd wordt dat je pagina tot 2099 geldig blijft zie ik niet waarom je echo $page->no_expire(); zou doen. De echo zal niets echo-en omdat de header() functie dat zelf al doet... Dan vind ik het vreemd dat je geen idee hebt of het client- of serverside zit en zie ik je 2x een "cache-control" header zetten..
Ik moet de code van een collega aanpassen, vandaar dat niet alles er logisch in staat :). En zelf snap ik de gedachtengang niet helemaal van een header (en weet ook niet waar ik een goede uitleg kan krijgen).
Overigens had ik al uitgelegd waarom ik niet begreep of het client- of serverside zit. Op php.net stond er niet duidelijk iets over uitgelegd.

[ Voor 30% gewijzigd door Verwijderd op 10-02-2009 11:35 . Reden: Extra info. ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 10 februari 2009 @ 11:14:
Ik moet de code van een collega aanpassen, vandaar dat niet alles er logisch in staat :)
Als je nog zaken aan je post wil toevoegen, gebruik dan de edit knop (Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/edit.gif) i.p.v. 2x achter elkaar posten (zie topickick binnen 24 uur).

[ Voor 7% gewijzigd door RobIII op 10-02-2009 11:16 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op dinsdag 10 februari 2009 @ 11:14:
[...]


Ik moet de code van een collega aanpassen, vandaar dat niet alles er logisch in staat :).
Ik zie niet in wat voor oorzakelijk verband er tussen die twee zinsdelen zit.
En zelf snap ik de gedachtengang niet helemaal van een header (en weet ook niet waar ik een goede uitleg kan krijgen).
De uitleg van http zou een goed begin zijn. Het komt er op neer dat een 'header' een stukje informatie is. Het geeft aan wat voor pagina de client (de browser) kan verwachten en wat hij er mee mag doen. Denk bijvoorbeeld aan of het een html pagina is, of een word document. Daarnaast kan met een header aangegeven worden of de pagina vaak veranderd. Door bijvoorbeeld te zeggen dat hij pas in 2099 expired zeg je tegen de browser dat je niet verwacht dat de pagina er voor 2099 anders uit gaat zien en dat de browser dus niet perse een nieuwe versie op hoeft te halen wanneer hij dezelfde URL tegenkomt.
Overigens had ik al uitgelegd waarom ik niet begreep of het client- of serverside zit. Op php.net stond er niet duidelijk iets over uitgelegd.
In het kort komt het er eigenlijk op neer dat ik je het beste aan kan raden om NU met deze klus te stoppen en je eerst eens te gaan verdiepen hoe dat hele http nu eigenlijk grofgezegd in elkaar steekt.

Tot slot, ik gok dat de melding meer te maken heeft met het feit dat het zoek resultaat gebaseerd is op een zoek formulier dat met POST verstuurd wordt.

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!

Verwijderd

Topicstarter
Het is inderdaad een formulier welke met POST wordt verstuurd. Maakt dat nog niets uit dan? Zou ik dat beter met GET kunnen doen, zodat de URL in ieder geval klopt en ik dus geen header-informatie hoef te versturen?

Acties:
  • 0 Henk 'm!

  • NielsNL
  • Registratie: Januari 2002
  • Laatst online: 08-09 20:14

NielsNL

DigiCow

Verwijderd schreef op dinsdag 10 februari 2009 @ 11:13:
[...]
Een browserback geeft aan: 'De webpagina is verlopen' als ik de header-functionaliteit niet toevoeg.
Dat komt omdat je browser weet dat er eerst opnieuw een POST verstuurd moet worden voordat hij de pagina krijgt. Dit is overigens browser afhankelijk.
Met POST gaan de meeste browser sowieso geen data van de HDD halen, wat ze met GET wel gaan doen.

Neem vooral Wiki eens door. ;)

M'n Oma is een site aan het haken.

Pagina: 1