mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 14:18:52 +00:00
[ticket/14261] Move the update of session informations to page_footer()
Currently, the unique way to disable the update of session_page is to pass "false" to the parameter of session_begin(). This method is directly called in app.php, so pages served from the routing system can't disable the update of session informations. By moving the update to page_footer, we can allow controllers to tell to the session manager that we don't want to update the session infos. PHPBB3-14261
This commit is contained in:
parent
6a7567459d
commit
88dd8a4849
3 changed files with 48 additions and 45 deletions
|
@ -5395,6 +5395,8 @@ function page_footer($run_cron = true, $display_template = true, $exit_handler =
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$user->update_session_infos();
|
||||||
|
|
||||||
phpbb_check_and_display_sql_report($request, $auth, $db);
|
phpbb_check_and_display_sql_report($request, $auth, $db);
|
||||||
|
|
||||||
$template->assign_vars(array(
|
$template->assign_vars(array(
|
||||||
|
|
|
@ -164,6 +164,8 @@ function adm_page_footer($copyright_html = true)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$user->update_session_infos();
|
||||||
|
|
||||||
phpbb_check_and_display_sql_report($request, $auth, $db);
|
phpbb_check_and_display_sql_report($request, $auth, $db);
|
||||||
|
|
||||||
$template->assign_vars(array(
|
$template->assign_vars(array(
|
||||||
|
|
|
@ -446,39 +446,6 @@ class session
|
||||||
|
|
||||||
if (!$session_expired)
|
if (!$session_expired)
|
||||||
{
|
{
|
||||||
// Only update session DB a minute or so after last update or if page changes
|
|
||||||
if ($this->time_now - $this->data['session_time'] > 60 || ($this->update_session_page && $this->data['session_page'] != $this->page['page']))
|
|
||||||
{
|
|
||||||
$sql_ary = array('session_time' => $this->time_now);
|
|
||||||
|
|
||||||
// Do not update the session page for ajax requests, so the view online still works as intended
|
|
||||||
if ($this->update_session_page && !$request->is_ajax())
|
|
||||||
{
|
|
||||||
$sql_ary['session_page'] = substr($this->page['page'], 0, 199);
|
|
||||||
$sql_ary['session_forum_id'] = $this->page['forum'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$db->sql_return_on_error(true);
|
|
||||||
|
|
||||||
$this->update_session($sql_ary);
|
|
||||||
|
|
||||||
$db->sql_return_on_error(false);
|
|
||||||
|
|
||||||
// If the database is not yet updated, there will be an error due to the session_forum_id
|
|
||||||
// @todo REMOVE for 3.0.2
|
|
||||||
if ($result === false)
|
|
||||||
{
|
|
||||||
unset($sql_ary['session_forum_id']);
|
|
||||||
|
|
||||||
$this->update_session($sql_ary);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->data['user_id'] != ANONYMOUS && !empty($config['new_member_post_limit']) && $this->data['user_new'] && $config['new_member_post_limit'] <= $this->data['user_posts'])
|
|
||||||
{
|
|
||||||
$this->leave_newly_registered();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->data['is_registered'] = ($this->data['user_id'] != ANONYMOUS && ($this->data['user_type'] == USER_NORMAL || $this->data['user_type'] == USER_FOUNDER)) ? true : false;
|
$this->data['is_registered'] = ($this->data['user_id'] != ANONYMOUS && ($this->data['user_type'] == USER_NORMAL || $this->data['user_type'] == USER_FOUNDER)) ? true : false;
|
||||||
$this->data['is_bot'] = (!$this->data['is_registered'] && $this->data['user_id'] != ANONYMOUS) ? true : false;
|
$this->data['is_bot'] = (!$this->data['is_registered'] && $this->data['user_id'] != ANONYMOUS) ? true : false;
|
||||||
$this->data['user_lang'] = basename($this->data['user_lang']);
|
$this->data['user_lang'] = basename($this->data['user_lang']);
|
||||||
|
@ -734,18 +701,6 @@ class session
|
||||||
// Only update session DB a minute or so after last update or if page changes
|
// Only update session DB a minute or so after last update or if page changes
|
||||||
if ($this->time_now - $this->data['session_time'] > 60 || ($this->update_session_page && $this->data['session_page'] != $this->page['page']))
|
if ($this->time_now - $this->data['session_time'] > 60 || ($this->update_session_page && $this->data['session_page'] != $this->page['page']))
|
||||||
{
|
{
|
||||||
$this->data['session_time'] = $this->data['session_last_visit'] = $this->time_now;
|
|
||||||
|
|
||||||
$sql_ary = array('session_time' => $this->time_now, 'session_last_visit' => $this->time_now, 'session_admin' => 0);
|
|
||||||
|
|
||||||
if ($this->update_session_page)
|
|
||||||
{
|
|
||||||
$sql_ary['session_page'] = substr($this->page['page'], 0, 199);
|
|
||||||
$sql_ary['session_forum_id'] = $this->page['forum'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->update_session($sql_ary);
|
|
||||||
|
|
||||||
// Update the last visit time
|
// Update the last visit time
|
||||||
$sql = 'UPDATE ' . USERS_TABLE . '
|
$sql = 'UPDATE ' . USERS_TABLE . '
|
||||||
SET user_lastvisit = ' . (int) $this->data['session_time'] . '
|
SET user_lastvisit = ' . (int) $this->data['session_time'] . '
|
||||||
|
@ -1599,4 +1554,48 @@ class session
|
||||||
$vars = array('session_data', 'session_id');
|
$vars = array('session_data', 'session_id');
|
||||||
extract($phpbb_dispatcher->trigger_event('core.update_session_after', compact($vars)));
|
extract($phpbb_dispatcher->trigger_event('core.update_session_after', compact($vars)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function update_session_infos()
|
||||||
|
{
|
||||||
|
global $db, $request;
|
||||||
|
|
||||||
|
// No need to update if it's a new session. Informations are already inserted by session_create()
|
||||||
|
if (isset($this->data['session_created']) && $this->data['session_created'])
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only update session DB a minute or so after last update or if page changes
|
||||||
|
if ($this->time_now - $this->data['session_time'] > 60 || ($this->update_session_page && $this->data['session_page'] != $this->page['page']))
|
||||||
|
{
|
||||||
|
$sql_ary = array('session_time' => $this->time_now);
|
||||||
|
|
||||||
|
// Do not update the session page for ajax requests, so the view online still works as intended
|
||||||
|
if ($this->update_session_page && !$request->is_ajax())
|
||||||
|
{
|
||||||
|
$sql_ary['session_page'] = substr($this->page['page'], 0, 199);
|
||||||
|
$sql_ary['session_forum_id'] = $this->page['forum'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$db->sql_return_on_error(true);
|
||||||
|
|
||||||
|
$this->update_session($sql_ary);
|
||||||
|
|
||||||
|
$db->sql_return_on_error(false);
|
||||||
|
|
||||||
|
// If the database is not yet updated, there will be an error due to the session_forum_id
|
||||||
|
// @todo REMOVE for 3.0.2
|
||||||
|
if ($result === false)
|
||||||
|
{
|
||||||
|
unset($sql_ary['session_forum_id']);
|
||||||
|
|
||||||
|
$this->update_session($sql_ary);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->data['user_id'] != ANONYMOUS && !empty($config['new_member_post_limit']) && $this->data['user_new'] && $config['new_member_post_limit'] <= $this->data['user_posts'])
|
||||||
|
{
|
||||||
|
$this->leave_newly_registered();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue