Simplify keep-alive action. Now the interval is based on session_lifetime,

which means it's executed only if needed for session keeping (reset interval on every action).

Temporarily remove check-recent request, it will be replaced by new global system refresh request in future.
Use keep_alive setting as auto-refresh request interval (allow no-refresh mode)
pull/45/merge
Aleksander Machniak 12 years ago
parent fb53c809a6
commit c442f822fb

@ -94,9 +94,6 @@ class rcmail extends rcube
// create user object
$this->set_user(new rcube_user($_SESSION['user_id']));
// configure session (after user config merge!)
$this->session_configure();
// set task and action properties
$this->set_task(rcube_utils::get_input_value('_task', rcube_utils::INPUT_GPC));
$this->action = asciiwords(rcube_utils::get_input_value('_action', rcube_utils::INPUT_GPC));
@ -320,10 +317,9 @@ class rcmail extends rcube
if (!($this->output instanceof rcube_output_html))
$this->output = new rcube_output_html($this->task, $framed);
// set keep-alive/check-recent interval
if ($this->session && ($keep_alive = $this->session->get_keep_alive())) {
$this->output->set_env('keep_alive', $keep_alive);
}
// set keep-alive interval
$this->output->set_env('keep_alive', $this->config->get('keep_alive', 0));
$this->output->set_env('session_lifetime', $this->config->get('session_lifetime', 0) * 60);
if ($framed) {
$this->comm_path .= '&_framed=1';
@ -522,7 +518,6 @@ class rcmail extends rcube
// Configure environment
$this->set_user($user);
$this->set_storage_prop();
$this->session_configure();
// fix some old settings according to namespace prefix
$this->fix_namespace_settings($user);

@ -434,6 +434,9 @@ class rcube
$this->session->register_gc_handler(array($this, 'temp_gc'));
$this->session->register_gc_handler(array($this, 'cache_gc'));
$this->session->set_secret($this->config->get('des_key') . dirname($_SERVER['SCRIPT_NAME']));
$this->session->set_ip_check($this->config->get('ip_check'));
// start PHP session (if not in CLI mode)
if ($_SERVER['REMOTE_ADDR']) {
session_start();
@ -441,33 +444,6 @@ class rcube
}
/**
* Configure session object internals
*/
public function session_configure()
{
if (!$this->session) {
return;
}
$lifetime = $this->config->get('session_lifetime', 0) * 60;
$keep_alive = $this->config->get('keep_alive');
// set keep-alive/check-recent interval
if ($keep_alive) {
// be sure that it's less than session lifetime
if ($lifetime) {
$keep_alive = min($keep_alive, $lifetime - 30);
}
$keep_alive = max(60, $keep_alive);
$this->session->set_keep_alive($keep_alive);
}
$this->session->set_secret($this->config->get('des_key') . dirname($_SERVER['SCRIPT_NAME']));
$this->session->set_ip_check($this->config->get('ip_check'));
}
/**
* Garbage collector function for temp files.
* Remove temp files older than two days

@ -43,7 +43,6 @@ class rcube_session
private $secret = '';
private $ip_check = false;
private $logging = false;
private $keep_alive = 0;
private $memcache;
/**
@ -525,24 +524,6 @@ class rcube_session
$this->now = $now - ($now % ($this->lifetime / 2));
}
/**
* Setter for keep_alive interval
*/
public function set_keep_alive($keep_alive)
{
$this->keep_alive = $keep_alive;
if ($this->lifetime < $keep_alive)
$this->set_lifetime($keep_alive + 30);
}
/**
* Getter for keep_alive interval
*/
public function get_keep_alive()
{
return $this->keep_alive;
}
/**
* Getter for remote IP saved with this session
@ -552,6 +533,7 @@ class rcube_session
return $this->ip;
}
/**
* Setter for cookie encryption secret
*/

@ -952,9 +952,6 @@ function rcube_webmail()
break;
}
// re-set keep-alive timeout
this.start_keepalive();
this.submit_messageform(true);
break;
@ -6077,6 +6074,9 @@ function rcube_webmail()
$('<a>').attr('href', url).appendTo(document.body).get(0).click();
else
target.location.href = url;
// reset keep-alive interval
this.start_keepalive();
};
// send a http request to the server
@ -6105,6 +6105,9 @@ function rcube_webmail()
success: function(data){ ref.http_response(data); },
error: function(o, status, err) { ref.http_error(o, status, err, lock, action); }
});
// reset keep-alive interval
this.start_keepalive();
};
// send a http POST request to the server
@ -6137,6 +6140,9 @@ function rcube_webmail()
success: function(data){ ref.http_response(data); },
error: function(o, status, err) { ref.http_error(o, status, err, lock, action); }
});
// reset keep-alive interval
this.start_keepalive();
};
// aborts ajax request
@ -6264,6 +6270,9 @@ function rcube_webmail()
this.triggerEvent('responseafter', {response: response});
this.triggerEvent('responseafter'+response.action, {response: response});
// reset keep-alive interval
this.start_keepalive();
};
// handle HTTP request errors
@ -6288,8 +6297,6 @@ function rcube_webmail()
// re-send keep-alive requests after 30 seconds
if (action == 'keep-alive')
setTimeout(function(){ ref.keep_alive(); ref.start_keepalive(); }, 30000);
else if (action == 'check-recent')
setTimeout(function(){ ref.check_for_recent(false); ref.start_keepalive(); }, 30000);
};
// post the given form to a hidden iframe
@ -6459,20 +6466,16 @@ function rcube_webmail()
}
};
// starts interval for keep-alive/check-recent signal
// starts interval for keep-alive signal
this.start_keepalive = function()
{
if (!this.env.keep_alive || this.env.framed)
if (!this.env.session_lifetime || this.env.framed || this.task == 'login' || this.env.action == 'print')
return;
if (this._int)
clearInterval(this._int);
if (this.task == 'mail' && this.gui_objects.mailboxlist)
this._int = setInterval(function(){ ref.check_for_recent(false); }, this.env.keep_alive * 1000);
else if (this.task != 'login' && this.env.action != 'print')
this._int = setInterval(function(){ ref.keep_alive(); }, this.env.keep_alive * 1000);
this._int = setInterval(function(){ ref.keep_alive(); }, this.env.session_lifetime * 0.5 * 1000);
};
// sends keep-alive signal
@ -6493,8 +6496,6 @@ function rcube_webmail()
if (refresh) {
lock = this.set_busy(true, 'checkingmail');
url._refresh = 1;
// reset check-recent interval
this.start_keepalive();
}
if (this.gui_objects.messagelist)

Loading…
Cancel
Save