Mina problem började med att jag skulle implementera en liten smart sak som låter webbläsaren hämta all information ur sin egen cache om sidan inte har uppdaterats sedan senaste besöket. Det sker med följande kod:
function cache_module() {
// Låt klassen avgöra om modulen skall hämtas ur cache
GLOBAL $modification_file, $HTTP_IF_MODIFIED_SINCE;
if(isset($modification_file) && ($mtime = filemtime($modification_file))) {
// to be on the safe side, refresh last modification time
// if it's "too old", forcing a reload from time to time.
// this is probably not necessary for most applications
if((mktime() - $mtime) > 3600) {
touch($modification_file);
$mtime = mktime();
}
$gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
// we assume that the client generates proper RFC 822/1123 dates
// (should work for all modern browsers and proxy caches)
if ($HTTP_IF_MODIFIED_SINCE == $gmt_mtime) {
// Hämta sidan från cache, då behöver inte servern utföra mer arbete!
header("HTTP/1.1 304 Not Modified");
exit;
}
$lastmod_header = "Last-Modified: " . $gmt_mtime;
Header($lastmod_header);
}
}
$modification_file är sökvägen till en fil vars "senast uppdaterad" värde uppdateras varje gång nyheter lägg till eller redigeras (sidan som jag skall använda det på räknar upp nyheter).
Kruxet är $HTTP_IF_MODIFIED_SINCE som jag gissar kommer från webbläsaren till servern? (om någon vet nått om den variablen så vore det mycket bra med en liten förklaring av vad det är).
För att den skall sättas som den skall måste man visst använda sig av funktionen session_cache_limiter().
Anropar den i början av mitt skript med argumentet private som jag tror skall räcka för det (kan också använda public, men private skall vara lite mer "strikt").
Nu är det så att jag misstänker att den funktionen strular till det för mina vanliga sessioner på nått sätt.
Såhär registrerar jag de vanliga som det är nu:
session_register("session_username");
session_register("session_userid");
session_register("session_userlevel");
Och när jag loggar in tilldelar jag dem på följande vis:
HTTP_SESSION_VARS['session_username'] = $username;
$HTTP_SESSION_VARS['session_userid'] = $id;
$HTTP_SESSION_VARS['session_userlevel'] = $userlevel;
$username, $id och $userlevel är korrekta!
track_vars är på och register_globals eller vad den heter är av (kör 4.2.1 i "standardutförande").
Är detta rätt sätt och hantera sina sessioner? Eller skall man använda session_start(), finns ju också en funktion som heter session_name(). Tycker det är lite allmänt förvirrande när jag läser dokumentationen på det området.
Och var skall jag använda session_cache_limiter('private')? För eller efter session_register() anropen (om det nu är rätt funktion och använda för att initiera dem vid varje sidladdning) ?
Sen en sista sak, vilken metod är rätt (för min PHP konfiguration) för och radera session variabler. session_unregister() för varje, eller session_unset() för alla samtidigt, eller spelar det ingen roll??
Kontenta:
Hur skall jag använda session_cache_limiter() för och få $HTTP_IF_MODIFIED_SINCE korrekt i samband med mina vanliga sessioner.
Jag är riktigt tacksam mot den som lyckas reda ut frågetecknen :)