aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/session.php
diff options
context:
space:
mode:
authorNils Adermann <naderman@naderman.de>2010-03-02 01:05:37 +0100
committerNils Adermann <naderman@naderman.de>2010-03-02 01:05:37 +0100
commitaa4495b8ad0cf90c2b3f655441ccfee49701282d (patch)
treee70cd18c1f03e6a0219bd0fbe41d896b350e974e /phpBB/includes/session.php
parent8a3c323933cbdadd302ed49b5769f90c3f622cdc (diff)
parent0aef1e57a73ef4c7086cf24ed154e8d5bbbac679 (diff)
downloadforums-aa4495b8ad0cf90c2b3f655441ccfee49701282d.tar
forums-aa4495b8ad0cf90c2b3f655441ccfee49701282d.tar.gz
forums-aa4495b8ad0cf90c2b3f655441ccfee49701282d.tar.bz2
forums-aa4495b8ad0cf90c2b3f655441ccfee49701282d.tar.xz
forums-aa4495b8ad0cf90c2b3f655441ccfee49701282d.zip
Merge commit 'release-3.0-RC8'
Diffstat (limited to 'phpBB/includes/session.php')
-rw-r--r--phpBB/includes/session.php35
1 files changed, 25 insertions, 10 deletions
diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php
index 6ddc97fff8..6149063dea 100644
--- a/phpBB/includes/session.php
+++ b/phpBB/includes/session.php
@@ -905,48 +905,59 @@ class session
}
$banned = false;
+ $cache_ttl = 3600;
+ $where_sql = array();
$sql = 'SELECT ban_ip, ban_userid, ban_email, ban_exclude, ban_give_reason, ban_end
FROM ' . BANLIST_TABLE . '
- WHERE (ban_end >= ' . time() . ' OR ban_end = 0)';
+ WHERE ';
// Determine which entries to check, only return those
if ($user_email === false)
{
- $sql .= " AND ban_email = ''";
+ $where_sql[] = "ban_email = ''";
}
if ($user_ips === false)
{
- $sql .= " AND (ban_ip = '' OR ban_exclude = 1)";
+ $where_sql[] = "(ban_ip = '' OR ban_exclude = 1)";
}
if ($user_id === false)
{
- $sql .= ' AND (ban_userid = 0 OR ban_exclude = 1)';
+ $where_sql[] = '(ban_userid = 0 OR ban_exclude = 1)';
}
else
{
- $sql .= ' AND (ban_userid = ' . $user_id;
+ $cache_ttl = ($user_id == ANONYMOUS) ? 3600 : 0;
+ $_sql = '(ban_userid = ' . $user_id;
if ($user_email !== false)
{
- $sql .= " OR ban_email <> ''";
+ $_sql .= " OR ban_email <> ''";
}
if ($user_ips !== false)
{
- $sql .= " OR ban_ip <> ''";
+ $_sql .= " OR ban_ip <> ''";
}
- $sql .= ')';
+ $_sql .= ')';
+
+ $where_sql[] = $_sql;
}
- $result = $db->sql_query($sql);
+ $sql .= (sizeof($where_sql)) ? implode(' AND ', $where_sql) : '';
+ $result = $db->sql_query($sql, $cache_ttl);
$ban_triggered_by = 'user';
while ($row = $db->sql_fetchrow($result))
{
+ if ($row['ban_end'] && $row['ban_end'] < time())
+ {
+ continue;
+ }
+
$ip_banned = false;
if (!empty($row['ban_ip']))
{
@@ -1007,7 +1018,8 @@ class session
// If the session is empty we need to create a valid one...
if (empty($this->session_id))
{
- $this->session_create(ANONYMOUS);
+ // This seems to be no longer needed? - #14971
+// $this->session_create(ANONYMOUS);
}
// Initiate environment ... since it won't be set at this stage
@@ -1052,6 +1064,9 @@ class session
$message .= ($ban_row['ban_give_reason']) ? '<br /><br />' . sprintf($this->lang['BOARD_BAN_REASON'], $ban_row['ban_give_reason']) : '';
$message .= '<br /><br /><em>' . $this->lang['BAN_TRIGGERED_BY_' . strtoupper($ban_triggered_by)] . '</em>';
+ // To circumvent session_begin returning a valid value and the check_ban() not called on second page view, we kill the session again
+ $this->session_kill(false);
+
trigger_error($message);
}