Solved wrong caching of message preview (#1484153, #1484236)

release-0.6
thomascube 18 years ago
parent 87e2fddb32
commit ff52bee1a2

@ -1,6 +1,12 @@
CHANGELOG RoundCube Webmail CHANGELOG RoundCube Webmail
--------------------------- ---------------------------
2007/03/01 (thomasb)
----------
- Solved page caching of message preview (closes #1484153)
- Only use gzip compression if configured (closes #1484236)
2007/02/25 (estadtherr) 2007/02/25 (estadtherr)
---------- ----------
- Fixed priority selector issue (#1484150) - Fixed priority selector issue (#1484150)

@ -2,9 +2,9 @@
/* /*
+-----------------------------------------------------------------------+ +-----------------------------------------------------------------------+
| RoundCube Webmail IMAP Client | | RoundCube Webmail IMAP Client |
| Version 0.1-20061206 | | Version 0.1-20070301 |
| | | |
| Copyright (C) 2005-2006, RoundCube Dev. - Switzerland | | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL | | Licensed under the GNU GPL |
| | | |
| Redistribution and use in source and binary forms, with or without | | Redistribution and use in source and binary forms, with or without |
@ -40,7 +40,7 @@
*/ */
define('RCMAIL_VERSION', '0.1-20061206'); define('RCMAIL_VERSION', '0.1-20070301');
// define global vars // define global vars
$CHARSET = 'UTF-8'; $CHARSET = 'UTF-8';
@ -106,7 +106,7 @@ if (!empty($_GET['_remote']))
if ($_action != 'get' && $_action != 'viewsource') if ($_action != 'get' && $_action != 'viewsource')
{ {
// use gzip compression if supported // use gzip compression if supported
if (function_exists('ob_gzhandler') && !ini_get('zlib.output_compression')) if (function_exists('ob_gzhandler') && ini_get('zlib.output_compression'))
ob_start('ob_gzhandler'); ob_start('ob_gzhandler');
else else
ob_start(); ob_start();

@ -190,13 +190,6 @@ function rcmail_authenticate_session()
setcookie('sessauth', rcmail_auth_hash(session_id(), $now)); setcookie('sessauth', rcmail_auth_hash(session_id(), $now));
} }
if (!$valid)
write_log('timeouts',
"REQUEST: " . var_export($_REQUEST, true) .
"\nEXPECTED: " . rcmail_auth_hash(session_id(), $_SESSION['auth_time']) .
"\nOR LAST: " . rcmail_auth_hash(session_id(), $_SESSION['last_auth']) .
"\nSESSION: " . var_export($_SESSION, true));
return $valid; return $valid;
} }
@ -559,6 +552,7 @@ function rcmail_login($user, $pass, $host=NULL)
$_SESSION['username'] = $user; $_SESSION['username'] = $user;
$_SESSION['user_lang'] = $sess_user_lang; $_SESSION['user_lang'] = $sess_user_lang;
$_SESSION['password'] = encrypt_passwd($pass); $_SESSION['password'] = encrypt_passwd($pass);
$_SESSION['login_time'] = mktime();
// force reloading complete list of subscribed mailboxes // force reloading complete list of subscribed mailboxes
rcmail_set_imap_prop(); rcmail_set_imap_prop();

@ -1216,17 +1216,48 @@ function send_nocacheing_headers()
// send header with expire date 30 days in future // send header with expire date 30 days in future
function send_future_expire_header() function send_future_expire_header($offset=2600000)
{ {
if (headers_sent()) if (headers_sent())
return; return;
header("Expires: ".gmdate("D, d M Y H:i:s", mktime()+2600000)." GMT"); header("Expires: ".gmdate("D, d M Y H:i:s", mktime()+$offset)." GMT");
header("Cache-Control: "); header("Cache-Control: max-age=$offset");
header("Pragma: "); header("Pragma: ");
} }
// check request for If-Modified-Since and send an according response
function send_modified_header($mdate, $etag=null)
{
if (headers_sent())
return;
$iscached = false;
if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $mdate)
$iscached = true;
$etag = $etag ? "\"$etag\"" : null;
if ($etag && $_SERVER['HTTP_IF_NONE_MATCH'] == $etag)
$iscached = true;
if ($iscached)
header("HTTP/1.x 304 Not Modified");
else
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $mdate)." GMT");
header("Cache-Control: max-age=0");
header("Expires: ");
header("Pragma: ");
if ($etag)
header("Etag: $etag");
if ($iscached)
exit;
}
// function to convert an array to a javascript array // function to convert an array to a javascript array
function array2js($arr, $type='') function array2js($arr, $type='')
{ {

@ -23,21 +23,14 @@ require_once('Mail/mimeDecode.php');
$PRINT_MODE = $_action=='print' ? TRUE : FALSE; $PRINT_MODE = $_action=='print' ? TRUE : FALSE;
// allow caching, unless remote images are present
if ((bool)get_input_value('_safe', RCUBE_INPUT_GET))
send_nocacheing_headers();
else
send_future_expire_header();
// similar code as in program/steps/mail/get.inc // similar code as in program/steps/mail/get.inc
if ($_GET['_uid']) if ($_GET['_uid'])
{ {
$MESSAGE = array('UID' => get_input_value('_uid', RCUBE_INPUT_GET)); $MESSAGE = array('UID' => get_input_value('_uid', RCUBE_INPUT_GET));
$MESSAGE['headers'] = $IMAP->get_headers($MESSAGE['UID']); $MESSAGE['headers'] = $IMAP->get_headers($MESSAGE['UID']);
$MESSAGE['structure'] = $IMAP->get_structure($MESSAGE['UID']);
// go back to list if message not found (wrong UID) // go back to list if message not found (wrong UID)
if (!$MESSAGE['headers'] || !$MESSAGE['structure']) if (!$MESSAGE['headers'])
{ {
show_message('messageopenerror', 'error'); show_message('messageopenerror', 'error');
if ($_action=='preview' && template_exists('messagepreview')) if ($_action=='preview' && template_exists('messagepreview'))
@ -49,9 +42,19 @@ if ($_GET['_uid'])
} }
} }
// calculate Etag for this request
$etag = md5($MESSAGE['UID'].$IMAP->get_mailbox_name().session_id().($PRINT_MODE?1:0));
// allow caching, unless remote images are present
if ((bool)get_input_value('_safe', RCUBE_INPUT_GET))
send_nocacheing_headers();
else
send_modified_header($_SESSION['login_time'], $etag);
$MESSAGE['subject'] = $IMAP->decode_header($MESSAGE['headers']->subject); $MESSAGE['subject'] = $IMAP->decode_header($MESSAGE['headers']->subject);
if ($MESSAGE['structure']) if ($MESSAGE['structure'] = $IMAP->get_structure($MESSAGE['UID']))
list($MESSAGE['parts'], $MESSAGE['attachments']) = rcmail_parse_message( list($MESSAGE['parts'], $MESSAGE['attachments']) = rcmail_parse_message(
$MESSAGE['structure'], $MESSAGE['structure'],
array('safe' => (bool)$_GET['_safe'], array('safe' => (bool)$_GET['_safe'],

Loading…
Cancel
Save