Properly cache on a per-user basis

This will fix an issue with templates of other users being applied to
different users logged in. Basically the first cached page would be
displayed for all users.

Created a new cache key for smarty to allow the user ID to be reference
in the cache key. Hence each user has their own cached file which will
be used.

Improved caching by creating subdirectories for cached files. This way
we won't run into a file limit per directory with a lot of cached files.

This fixes #430 and the mentioned issue in that report.
This commit is contained in:
Sebastian Grewe 2013-07-11 13:45:54 +02:00
parent ed573e6e46
commit 739bd9c7b6
9 changed files with 10 additions and 8 deletions

View File

@ -9,7 +9,7 @@ if (!$user->isAuthenticated() || !$user->isAdmin($_SESSION['USERDATA']['id'])) {
die("404 Page not found");
}
if (!$smarty->isCached('master.tpl', md5(serialize($_REQUEST)))) {
if (!$smarty->isCached('master.tpl', $smarty_cache_key)) {
$debug->append('No cached version available, fetching from backend', 3);
$aTransactions = $transaction->getAllTransactions(@$_REQUEST['start']);
if (!$aTransactions) $_SESSION['POPUP'][] = array('CONTENT' => 'Could not find any transaction', 'TYPE' => 'errormsg');

View File

@ -9,7 +9,7 @@ if (!$user->isAuthenticated() || !$user->isAdmin($_SESSION['USERDATA']['id'])) {
die("404 Page not found");
}
if (!$smarty->isCached('master.tpl', md5(serialize($_REQUEST)))) {
if (!$smarty->isCached('master.tpl', $smarty_cache_key)) {
$debug->append('No cached version available, fetching from backend', 3);
if ($bitcoin->can_connect() === true){
$dBalance = $bitcoin->query('getbalance');

View File

@ -6,7 +6,7 @@ if (!defined('SECURITY')) die('Hacking attempt');
// Include markdown library
use \Michelf\Markdown;
if (!$smarty->isCached('master.tpl', md5(serialize($_REQUEST)))) {
if (!$smarty->isCached('master.tpl', $smarty_cache_key)) {
$debug->append('No cached version available, fetching from backend', 3);
// Fetch active news to display
$aNews = $news->getAllActive();

View File

@ -4,7 +4,7 @@
if (!defined('SECURITY'))
die('Hacking attempt');
if (!$smarty->isCached('master.tpl', md5(serialize($_REQUEST)))) {
if (!$smarty->isCached('master.tpl', $smarty_cache_key)) {
$debug->append('No cached version available, fetching from backend', 3);
if ($bitcoin->can_connect() === true){
$dDifficulty = $bitcoin->query('getdifficulty');

View File

@ -4,7 +4,7 @@
if (!defined('SECURITY')) die('Hacking attempt');
// Grab the last blocks found
if (!$smarty->isCached('master.tpl', md5(serialize($_REQUEST)))) {
if (!$smarty->isCached('master.tpl', $smarty_cache_key)) {
$debug->append('No cached version available, fetching from backend', 3);
// Grab the last blocks found
$iLimit = 20;

View File

@ -3,7 +3,7 @@
// Make sure we are called from index.php
if (!defined('SECURITY')) die('Hacking attempt');
if (!$smarty->isCached('master.tpl', md5(serialize($_REQUEST)))) {
if (!$smarty->isCached('master.tpl', $smarty_cache_key)) {
$debug->append('No cached version available, fetching from backend', 3);
if ($user->isAuthenticated()) {
$aHourlyHashRates = $statistics->getHourlyHashrateByAccount($_SESSION['USERDATA']['id']);

View File

@ -3,7 +3,7 @@
// Make sure we are called from index.php
if (!defined('SECURITY')) die('Hacking attempt');
if (!$smarty->isCached('master.tpl', md5(serialize($_REQUEST)))) {
if (!$smarty->isCached('master.tpl', $smarty_cache_key)) {
$debug->append('No cached version available, fetching from backend', 3);
// Fetch data from wallet
if ($bitcoin->can_connect() === true){

View File

@ -25,5 +25,7 @@ if ($config['smarty']['cache']) {
$smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);
$smarty->cache_lifetime = $config['smarty']['cache_lifetime'];
$smarty->cache_dir = BASEPATH . "templates/cache";
$smarty->use_sub_dirs = true;
$smarty_cache_key = md5(serialize($_REQUEST . @$_SESSION['USERDATA']['id']));
}
?>

View File

@ -82,7 +82,7 @@ $smarty->assign('DebuggerInfo', $debug->getDebugInfo());
// Display our page
if (!@$supress_master)
$smarty->display("master.tpl", md5(serialize($_REQUEST)));
$smarty->display("master.tpl", $smarty_cache_key);
// Unset any temporary values here
unset($_SESSION['POPUP']);