On Wednesday 05 September 2001 21:22, Ouster wrote: > I'm making a sort of cache system. I fell to this problem: I leave a > cookie with the timestamp of the last access, and when the user > reconnect, I compare the timestamp of the last change with the > timestamp sent me with the cookie. Then I leave a new cookie. > > So: > if($last_modified <= $last_access) > { > header("304 Not Modified); > exit; > } > else > { > /* code genertating the new page */ > } Tip: You don't even need a cookie for that. If you send a "Last-Modified: " header along with all your pages (and perhaps even if you don't), the browser will automatically add an "If-Modified-Since:" header on each request. See the attached files for how to handle this > Whether the If is TRUE, I get a blank page, else I see a new page > (correct behaviour). > Why I always get a blank page and not the cached page? (see other responses) -- Christian Reiniger LGDC Webmaster (http://lgdc.sunsite.dk/) /* you are not expected to understand this */ - from the UNIX V6 kernel source
<?php /** * Functions for HTTP info handling * * Authors : Christian Reiniger <[EMAIL PROTECTED]> * License : GNU GPL V2 or later (http://www.fsf.org/copyleft/gpl.html) * * Last change by $Author$ * on $Date$ * to $Revision$ */ /** * Display the "404 - Not Found" page */ function pbHTTP_404 () { global $pbGlobals; header ("HTTP/1.0 404 Not Found"); include ($pbGlobals->Inc404); exit (); } /** * Send a "304 - Not Modified" response */ function pbHTTP_304 () { header ('HTTP/1.0 304 Not Modified'); header ('Date: ' . gmdate ('D, d M Y H:i:s') . ' GMT'); exit (); } /** * Get the value passed in an "If-Modified-Since" header or -1 if none set * Returns a Unix timestamp; */ function pbHTTP_GetModifiedSince () { foreach (getallheaders () as $Key => $Val) { if ($Key == 'If-Modified-Since') { return strtotime (trim ($Val)); } } return -1; } /** * Send a "Last-Modified" header */ function pbHTTP_LastMod ($Unixtime = 0) { if ($Unixtime == 0) $Unixtime = time (); $TimeS = gmdate ('D, d M Y H:i:s', $Unixtime); header ("Last-Modified: $TimeS GMT"); } /** * Send headers to disallow caching */ function pbHTTP_NoCache () { header ('Expires: -1'); header ('Cache-Control: no-cache'); header ('Pragma: no-cache'); } ?>
<?php /* * Cached page handler * * Authors : Christian Reiniger <[EMAIL PROTECTED]> * License : GNU GPL V2 or later (http://www.fsf.org/copyleft/gpl.html) * * Last change by $Author$ * on $Date$ * to $Revision$ */ require_once ('base/defaults.php'); require_once ('phpbase/phpbase.php'); require_once ('phpbase/database.php'); require_once ('phpbase/session.php'); require_once ('phpbase/db/pagecache.php'); require_once ('phpbase/util/http.php'); assert (defined ('PAGETYPE')); $TheSession = new KSession (); $TheSession->OpenLight (); /* if ($pbSessionUser->IsRealUser () == false) $TheSession->Relogin (); */ list ($Page, $CTime) = GetPage ($REQUEST_URI); if ($Page === false) pbHTTP_404 (); HandleCacheHeaders ($CTime); if (defined ('PAGE_HITCOUNTER') || defined ('PAGE_USERINFO')) { $Page = Postprocess ($Page); } // There should be a zlib.output_compression = on in a config file! print $Page; //Output ($Page); $TheSession->Close (); function GetPage ($TheURI) { $Usermode = GetUsermode (); $TheURI = FixURI ($TheURI); $Page = false; if (!defined ('PAGE_NOSERVERCACHE')) { $Cache = new pbPageCache (PAGETYPE); $Page = $Cache->Get ($TheURI, $Usermode); $CTime = $Cache->GetCTime (); } if ($Page === false) { include ('ui/page_builder.php'); $Builder = new PageBuilder (PAGETYPE); $Page = $Builder->Build ($TheURI, $Usermode); $CTime = time (); } return array ($Page, $CTime); } function FixURI ($TheURI) { if (substr ($TheURI, -5) == '.html') return $TheURI; if (substr ($TheURI, -1) == '/') return $TheURI . 'index.html'; else return $TheURI . '/index.html'; } function HandleCacheHeaders ($CTime) { if (defined ('PAGE_NOCACHE')) { pbHTTP_NoCache (); return; } $MS = pbHTTP_GetModifiedSince (); if ($CTime == -1) { pbHTTP_LastMod (); return; } if (($MS != -1) && ($CTime < $MS)) { // changed in the meantime pbHTTP_304 (); } else { pbHTTP_LastMod ($CTime); } } function GetUsermode () { global $pbSessionUser; if (isset ($pbSessionUser)) { if ($pbSessionUser->CheckPerm (PAGETYPE, 'maintainer')) { return 'maint'; } elseif ($pbSessionUser->IsRealUser ()) { return 'logged_in'; } } return 'std'; } function Postprocess ($Page) { include ('ui/postprocess_page.php'); return PostprocessPage ($Page, GetUsermode ()); } function Output ($Page) { global $HTTP_SERVER_VARS; if (strstr($HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'], 'gzip')) { if (function_exists ('gzencode')) { $Page = gzencode ($Page); header("Content-Encoding: gzip"); } } header ("Content-Length: " . strlen ($Page)); print ($Page); } ?>
-- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]