[Snippet] Prevent Double Login (update)

Little Mods and Snips 2

[Snippet] Prevent Double Login (update)

Postby Sekuro » 17 Oct 2011, 17:45

Prevent Double Login

Credit: BNa

With this Snippet, the first user logged out instantly, if second user logged in with same account

open

includes/functions.php

find

Code: Select all
    // The following assigns all _common_ variables that may be used at any point in a template.
    $template->assign_vars(array(


before add

Code: Select all
// First User logged out instantly, if second User logged in with same Account / BNa / 2011
if ((!$user->data['is_bot']) && ($user->data['user_id'] !== ANONYMOUS))
{
$sql = 'SELECT session_id, session_user_id, session_start
        FROM '
 . SESSIONS_TABLE . '
        WHERE session_user_id   = '
 . (int) $user->data['user_id'] . '
        ORDER BY session_start DESC'
;
$result = $db->sql_query($sql);
$row    = $db->sql_fetchrowset($result);
$db->sql_freeresult($result);    

if 
((isset($row[0]['session_user_id']) && isset($row[1]['session_user_id']))
&&
 ($row[0]['session_user_id'] = $row[1]['session_user_id']))
                          {
$row_user_id       = $row[0]['session_user_id'];
$row_session_id    = $row[0]['session_id'];
$row_session_start = $row[0]['session_start'];

$sql = 'DELETE FROM ' . SESSIONS_TABLE . "
        WHERE session_user_id  = "
 . (int) $row_user_id . "
        AND session_id        != '
$row_session_id'        
        AND session_start     != '
$row_session_start'";
$db->sql_query($sql);

$sql = 'DELETE FROM ' . SESSIONS_KEYS_TABLE . '
        WHERE user_id = '
 . (int) $row_user_id . "
        AND last_ip <> '"
 . $user->data['session_ip']. "'";
$db->sql_query($sql); 
                          
}
}
// First User logged out instantly, if second User logged in with same Account/ BNa / 2011               

If you want it absolute restrictive (both users with same user account are logged out), use

Code: Select all
$sql = 'DELETE FROM ' . SESSIONS_KEYS_TABLE . '
        WHERE user_id = '
 . (int) $row_user_id;
$db->sql_query($sql);

instead of

Code: Select all
$sql = 'DELETE FROM ' . SESSIONS_KEYS_TABLE . '
        WHERE user_id = '
 . (int) $row_user_id . "
        AND last_ip <> '"
 . $user->data['session_ip']. "'";
$db->sql_query($sql);
Mod-Bot / Service-Team
User avatar
Sekuro

Tiptop

Tiptop
 
Posts: 241
Joined: 11 Feb 2008, 11:49
 
Resolution: 1440x900



Re: [Snippet] Prevent Double Login (update)

Postby 4seven » 29 Sep 2012, 19:10

Another version from a Code Mate

Source: https://www.phpbb.de/community/viewtopi ... 2#p1283567
Credit: Miriam

Miriam wrote:Wenn Du unterbinden möchtest, daß mehrere verschiedene Browser mit derselben User-ID auf Dein Board zugreifen können, kannst Du mittels dieser Codeanpassung die übrigen Sessions abmelden lassen.

Finde in der /includes/sessions.php
    Code: Select all
            $_EXTRA_URL = array();
davor füge ein:
    Code: Select all
            // Check if someone else is logged in having the same user-id and log them out immediately.
            $sql = 'SELECT session_user_id as session_user_id FROM ' . SESSIONS_TABLE . "
                    WHERE session_id = '"
     . $this->session_id . "'";
            $result = $db->sql_query($sql);
            $row = $db->sql_fetchrow($result);
            $db->sql_freeresult($result);

            $logged_in_user = $row['session_user_id'];
            if ($logged_in_user > 1)
            {
                $sql = 'DELETE FROM ' . SESSIONS_TABLE . 
                        WHERE session_user_id = 
    $logged_in_user
                            AND session_id <> '"
     . $this->session_id . "'";
                $db->sql_query($sql);

                $sql = 'DELETE FROM ' . SESSIONS_KEYS_TABLE . "
                        WHERE user_id = 
    $logged_in_user 
                        AND key_id <> '"
     . $db->sql_escape(md5($this->cookie_data['k'])) . "'";
                $db->sql_query($sql);

            }

Sollte funktionieren.
Current Mods | Mod Base | php(BB) programming | No help via PM
User avatar
4seven

Tiptop

Tiptop
 
Posts: 318
Joined: 20 Jun 2012, 16:55
 
Resolution: 1920x1080



Return to Snip Cl@ss II

Who is online

Users browsing this forum: No registered users and 1 guest

cron