Seite 105 von 175

Verfasst: 06.08.2006 20:18
von darklordi
manica hat geschrieben: Ich glaube der Mod ist mit der neuen deutschen Version nicht ganz kompatibel.
Also mit meiner schon :D
und www.evop.de nehm ich mal an wird auch aktuell sein.

Verfasst: 06.08.2006 20:22
von fanrpg
Ich glaube der Mod ist mit der neuen deutschen Version nicht ganz kompatibel.
Natürlich :D

Wie kommst auf so ein Schwachsinn?
Nur weil es bei dir nicht funktioniert, und es zufällig die eingedeutschte Version ist, muss es noch lange nicht das Paket in Verbindung mit dem Mod sein, ich denke es liegt eher am Server.

Verfasst: 06.08.2006 20:32
von manica
Warum wird dann nicht umgeschrieben.
Die Abarbeitung der Session bleibt wohl einfach stehen.
Bei anderen Boards die auf meinen Server laufen gibt es diese Übersetzungsfehler nicht, sind aber meist früherere phpbb Versionen. Also kanns mal nicht am Server liegen.
Es werden ja auch Umlaute in der HTML Ausgabe teilweise falsch ausgegeben. Also vermute ich mal da das Problem. Bin schon auf der Suche was sich zur letzten phpbb version geändert hat.

Wie gesagt der Link Forenübersicht wird so "Foren-Übersicht" ausgegeben. Und das hat nichts mit dem Mod zu tun sondern mit dem phpbb

Umlaute aus der DB kommen aber richtig.

Verfasst: 06.08.2006 20:39
von fanrpg
Ich würde eher mal auf dem encoding ansetzen (utf-8, usw.)

Verfasst: 06.08.2006 22:17
von manica
Ja daran habe ich auch schon gedacht. In der Language steht iso-8859-1
Oder findet man es noch an anderer Stelle?

Verfasst: 06.08.2006 22:20
von fanrpg
im http-header könnte er auch noch vorzufinden sein.

Verfasst: 06.08.2006 23:07
von manica
Habe noch ein bischen gesucht aber nichts gefunden. Das iso-8859-1
kann nicht sein da es bei anderen Foren auch drin steht und da geht es.
Er holt sich ja den topicnamen der korrekt inkl. Umlaute in der DB steht.
Allerdings happerts dann am ersetzen. Als wenn der Punkt einfach übergangen würde. Welche Version vom phpbb benutzt Du?
Wenn die aktuelle deutsche hier Probleme macht wechsel ich eben kurz.
Eine Lösung scheint ja nicht so schnell in Sicht. :cry:

Verfasst: 06.08.2006 23:40
von fanrpg
2.0.21 händisch jeweils geupdatet, von 2.0.19.
Und auch das deutsche Paket von hier :wink:
Während die Updateanleitungen von phpbb.com kommen.

Verfasst: 07.08.2006 00:01
von mgutt
@ maniac

Es bringt nicht viel in den Quelltext zu schauen, wenn mein Mod aktiv ist. Setz den Switch in der sessions.php mal auf false und dann schau nochmal was im Quelltext steht.

Weiterhin kannst Du mal testen vor der Zeile, wo ersetzt wird den $seo_title mal ausgeben zu lassen in dem du das davor einsetzt:

Code: Alles auswählen

echo($seo_title);
Dann sehen wir genau, mit was die Variable gefüllt wurde. Das würde am besten helfen.

Um Deine andere Frage noch zu beantworten: Mein Board ist ein heavily CH modded phpBB. Daher ist mein Mod dort auch stark abgewandelt. Aber wie gesagt, die Basis ist die gleiche.

Gruß

Verfasst: 07.08.2006 14:38
von manica
Also wenn ich den Mod abschalte ist alles ok.
Wenn ich ein Echo davor setze kömmen die Title korrekt in der obersten Zeile mit Umlaute. Danach der Fehler wegen doppelt gesendeten Header was ja normal scheint. Nur die URLs sind immer noch ohne Umlaute.
Habs schon mit nem anderen Browser und anderen Computer probiert aber die werden definitiv ohne Umlaute ausgegeben. Also ist es doch die Stelle an der die Umlaute getauscht werden sollten.

Hier mal die ganze Sessions.php

Code: Alles auswählen

<?php
/***************************************************************************
 *                                sessions.php
 *                            -------------------
 *   begin                : Saturday, Feb 13, 2001
 *   copyright            : (C) 2001 The phpBB Group
 *   email                : support@phpbb.com
 *
 *   $Id: sessions.php,v 1.58.2.25 2006/05/18 19:23:07 grahamje Exp $
 *
 *
 ***************************************************************************/

/***************************************************************************
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 ***************************************************************************/

//
// Adds/updates a new session to the database for the given userid.
// Returns the new session ID on success.
//
function session_begin($user_id, $user_ip, $page_id, $auto_create = 0, $enable_autologin = 0, $admin = 0)
{
        global $db, $board_config;
        global $HTTP_COOKIE_VARS, $HTTP_GET_VARS, $SID;

        $cookiename = $board_config['cookie_name'];
        $cookiepath = $board_config['cookie_path'];
        $cookiedomain = $board_config['cookie_domain'];
        $cookiesecure = $board_config['cookie_secure'];

        if ( isset($HTTP_COOKIE_VARS[$cookiename . '_sid']) || isset($HTTP_COOKIE_VARS[$cookiename . '_data']) )
        {
                $session_id = isset($HTTP_COOKIE_VARS[$cookiename . '_sid']) ? $HTTP_COOKIE_VARS[$cookiename . '_sid'] : '';
                $sessiondata = isset($HTTP_COOKIE_VARS[$cookiename . '_data']) ? unserialize(stripslashes($HTTP_COOKIE_VARS[$cookiename . '_data'])) : array();
                $sessionmethod = SESSION_METHOD_COOKIE;
        }
        else
        {
                $sessiondata = array();
                $session_id = ( isset($HTTP_GET_VARS['sid']) ) ? $HTTP_GET_VARS['sid'] : '';
                $sessionmethod = SESSION_METHOD_GET;
        }

        //
        if (!preg_match('/^[A-Za-z0-9]*$/', $session_id))
        {
                $session_id = '';
        }

        $page_id = (int) $page_id;

        $last_visit = 0;
        $current_time = time();

        //
        // Are auto-logins allowed?
        // If allow_autologin is not set or is true then they are
        // (same behaviour as old 2.0.x session code)
        //
        if (isset($board_config['allow_autologin']) && !$board_config['allow_autologin'])
        {
                $enable_autologin = $sessiondata['autologinid'] = false;
        }

        //
        // First off attempt to join with the autologin value if we have one
        // If not, just use the user_id value
        //
        $userdata = array();

        if ($user_id != ANONYMOUS)
        {
                if (isset($sessiondata['autologinid']) && (string) $sessiondata['autologinid'] != '' && $user_id)
                {
                        $sql = 'SELECT u.*
                                FROM ' . USERS_TABLE . ' u, ' . SESSIONS_KEYS_TABLE . ' k
                                WHERE u.user_id = ' . (int) $user_id . "
                                        AND u.user_active = 1
                                        AND k.user_id = u.user_id
                                        AND k.key_id = '" . md5($sessiondata['autologinid']) . "'";
                        if (!($result = $db->sql_query($sql)))
                        {
                                message_die(CRITICAL_ERROR, 'Error doing DB query userdata row fetch', '', __LINE__, __FILE__, $sql);
                        }

                        $userdata = $db->sql_fetchrow($result);
                        $db->sql_freeresult($result);

                        $enable_autologin = $login = 1;
                }
                else if (!$auto_create)
                {
                        $sessiondata['autologinid'] = '';
                        $sessiondata['userid'] = $user_id;

                        $sql = 'SELECT *
                                FROM ' . USERS_TABLE . '
                                WHERE user_id = ' . (int) $user_id . '
                                        AND user_active = 1';
                        if (!($result = $db->sql_query($sql)))
                        {
                                message_die(CRITICAL_ERROR, 'Error doing DB query userdata row fetch', '', __LINE__, __FILE__, $sql);
                        }

                        $userdata = $db->sql_fetchrow($result);
                        $db->sql_freeresult($result);

                        $login = 1;
                }
        }

        //
        // At this point either $userdata should be populated or
        // one of the below is true
        // * Key didn't match one in the DB
        // * User does not exist
        // * User is inactive
        //
        if (!sizeof($userdata) || !is_array($userdata) || !$userdata)
        {
                $sessiondata['autologinid'] = '';
                $sessiondata['userid'] = $user_id = ANONYMOUS;
                $enable_autologin = $login = 0;

                $sql = 'SELECT *
                        FROM ' . USERS_TABLE . '
                        WHERE user_id = ' . (int) $user_id;
                if (!($result = $db->sql_query($sql)))
                {
                        message_die(CRITICAL_ERROR, 'Error doing DB query userdata row fetch', '', __LINE__, __FILE__, $sql);
                }

                $userdata = $db->sql_fetchrow($result);
                $db->sql_freeresult($result);
        }


        //
        // Initial ban check against user id, IP and email address
        //
        preg_match('/(..)(..)(..)(..)/', $user_ip, $user_ip_parts);

        $sql = "SELECT ban_ip, ban_userid, ban_email
                FROM " . BANLIST_TABLE . "
                WHERE ban_ip IN ('" . $user_ip_parts[1] . $user_ip_parts[2] . $user_ip_parts[3] . $user_ip_parts[4] . "', '" . $user_ip_parts[1] . $user_ip_parts[2] . $user_ip_parts[3] . "ff', '" . $user_ip_parts[1] . $user_ip_parts[2] . "ffff', '" . $user_ip_parts[1] . "ffffff')
                        OR ban_userid = $user_id";
        if ( $user_id != ANONYMOUS )
        {
                $sql .= " OR ban_email LIKE '" . str_replace("\'", "''", $userdata['user_email']) . "'
                        OR ban_email LIKE '" . substr(str_replace("\'", "''", $userdata['user_email']), strpos(str_replace("\'", "''", $userdata['user_email']), "@")) . "'";
        }
        if ( !($result = $db->sql_query($sql)) )
        {
                message_die(CRITICAL_ERROR, 'Could not obtain ban information', '', __LINE__, __FILE__, $sql);
        }

        if ( $ban_info = $db->sql_fetchrow($result) )
        {
                if ( $ban_info['ban_ip'] || $ban_info['ban_userid'] || $ban_info['ban_email'] )
                {
                        message_die(CRITICAL_MESSAGE, 'You_been_banned');
                }
        }

        //
        // Create or update the session
        //
        $sql = "UPDATE " . SESSIONS_TABLE . "
                SET session_user_id = $user_id, session_start = $current_time, session_time = $current_time, session_page = $page_id, session_logged_in = $login, session_admin = $admin
                WHERE session_id = '" . $session_id . "'
                        AND session_ip = '$user_ip'";
        if ( !$db->sql_query($sql) || !$db->sql_affectedrows() )
        {
                $session_id = md5(dss_rand());

                $sql = "INSERT INTO " . SESSIONS_TABLE . "
                        (session_id, session_user_id, session_start, session_time, session_ip, session_page, session_logged_in, session_admin)
                        VALUES ('$session_id', $user_id, $current_time, $current_time, '$user_ip', $page_id, $login, $admin)";
                if ( !$db->sql_query($sql) )
                {
                        message_die(CRITICAL_ERROR, 'Error creating new session', '', __LINE__, __FILE__, $sql);
                }
        }

        if ( $user_id != ANONYMOUS )
        {
                $last_visit = ( $userdata['user_session_time'] > 0 ) ? $userdata['user_session_time'] : $current_time;

                if (!$admin)
                {
                        $sql = "UPDATE " . USERS_TABLE . "
                                SET user_session_time = $current_time, user_session_page = $page_id, user_lastvisit = $last_visit
                                WHERE user_id = $user_id";
                        if ( !$db->sql_query($sql) )
                        {
                                message_die(CRITICAL_ERROR, 'Error updating last visit time', '', __LINE__, __FILE__, $sql);
                        }
                }

                $userdata['user_lastvisit'] = $last_visit;

                //
                // Regenerate the auto-login key
                //
                if ($enable_autologin)
                {
                        $auto_login_key = dss_rand() . dss_rand();

                        if (isset($sessiondata['autologinid']) && (string) $sessiondata['autologinid'] != '')
                        {
                                $sql = 'UPDATE ' . SESSIONS_KEYS_TABLE . "
                                        SET last_ip = '$user_ip', key_id = '" . md5($auto_login_key) . "', last_login = $current_time
                                        WHERE key_id = '" . md5($sessiondata['autologinid']) . "'";
                        }
                        else
                        {
                                $sql = 'INSERT INTO ' . SESSIONS_KEYS_TABLE . "(key_id, user_id, last_ip, last_login)
                                        VALUES ('" . md5($auto_login_key) . "', $user_id, '$user_ip', $current_time)";
                        }

                        if ( !$db->sql_query($sql) )
                        {
                                message_die(CRITICAL_ERROR, 'Error updating session key', '', __LINE__, __FILE__, $sql);
                        }

                        $sessiondata['autologinid'] = $auto_login_key;
                        unset($auto_login_key);
                }
                else
                {
                        $sessiondata['autologinid'] = '';
                }

//                $sessiondata['autologinid'] = (!$admin) ? (( $enable_autologin && $sessionmethod == SESSION_METHOD_COOKIE ) ? $auto_login_key : '') : $sessiondata['autologinid'];
                $sessiondata['userid'] = $user_id;
        }

        $userdata['session_id'] = $session_id;
        $userdata['session_ip'] = $user_ip;
        $userdata['session_user_id'] = $user_id;
        $userdata['session_logged_in'] = $login;
        $userdata['session_page'] = $page_id;
        $userdata['session_start'] = $current_time;
        $userdata['session_time'] = $current_time;
        $userdata['session_admin'] = $admin;
        $userdata['session_key'] = $sessiondata['autologinid'];

        setcookie($cookiename . '_data', serialize($sessiondata), $current_time + 31536000, $cookiepath, $cookiedomain, $cookiesecure);
        setcookie($cookiename . '_sid', $session_id, 0, $cookiepath, $cookiedomain, $cookiesecure);


        if ( $userdata['session_user_id'] != ANONYMOUS || $userdata['session_page'] == PAGE_PROFILE || $userdata['session_page'] == PAGE_SEARCH )
        {
                if ( $userdata['session_user_id'] != ANONYMOUS || $userdata['session_page'] == -4 || $userdata['session_page'] == -2 )
   {
      $SID = 'sid=' . $session_id;
   }
   else
   {
      $SID = '';
   }
        }
        else
        {
                $SID = '';
        }

        return $userdata;
}

//
// Checks for a given user session, tidies session table and updates user
// sessions at each page refresh
//
function session_pagestart($user_ip, $thispage_id)
{
        global $db, $lang, $board_config;
        global $HTTP_COOKIE_VARS, $HTTP_GET_VARS, $SID;

        $cookiename = $board_config['cookie_name'];
        $cookiepath = $board_config['cookie_path'];
        $cookiedomain = $board_config['cookie_domain'];
        $cookiesecure = $board_config['cookie_secure'];

        $current_time = time();
        unset($userdata);

        if ( isset($HTTP_COOKIE_VARS[$cookiename . '_sid']) || isset($HTTP_COOKIE_VARS[$cookiename . '_data']) )
        {
                $sessiondata = isset( $HTTP_COOKIE_VARS[$cookiename . '_data'] ) ? unserialize(stripslashes($HTTP_COOKIE_VARS[$cookiename . '_data'])) : array();
                $session_id = isset( $HTTP_COOKIE_VARS[$cookiename . '_sid'] ) ? $HTTP_COOKIE_VARS[$cookiename . '_sid'] : '';
                $sessionmethod = SESSION_METHOD_COOKIE;
        }
        else
        {
                $sessiondata = array();
                $session_id = ( isset($HTTP_GET_VARS['sid']) ) ? $HTTP_GET_VARS['sid'] : '';
                $sessionmethod = SESSION_METHOD_GET;
        }

        //
        if (!preg_match('/^[A-Za-z0-9]*$/', $session_id))
        {
                $session_id = '';
        }

        $thispage_id = (int) $thispage_id;

        //
        // Does a session exist?
        //
        if ( !empty($session_id) )
        {
                //
                // session_id exists so go ahead and attempt to grab all
                // data in preparation
                //
                $sql = "SELECT u.*, s.*
                        FROM " . SESSIONS_TABLE . " s, " . USERS_TABLE . " u
                        WHERE s.session_id = '$session_id'
                                AND u.user_id = s.session_user_id";
                if ( !($result = $db->sql_query($sql)) )
                {
                        message_die(CRITICAL_ERROR, 'Error doing DB query userdata row fetch', '', __LINE__, __FILE__, $sql);
                }

                $userdata = $db->sql_fetchrow($result);

                //
                // Did the session exist in the DB?
                //
                if ( isset($userdata['user_id']) )
                {
                        //
                        // Do not check IP assuming equivalence, if IPv4 we'll check only first 24
                        // bits ... I've been told (by vHiker) this should alleviate problems with
                        // load balanced et al proxies while retaining some reliance on IP security.
                        //
                        $ip_check_s = substr($userdata['session_ip'], 0, 6);
                        $ip_check_u = substr($user_ip, 0, 6);

                        if ($ip_check_s == $ip_check_u)
                        {
                                $SID = ($sessionmethod == SESSION_METHOD_GET || defined('IN_ADMIN')) ? 'sid=' . $session_id : '';

                                //
                                // Only update session DB a minute or so after last update
                                //
                                if ( $current_time - $userdata['session_time'] > 60 )
                                {
                                        // A little trick to reset session_admin on session re-usage
                                        $update_admin = (!defined('IN_ADMIN') && $current_time - $userdata['session_time'] > ($board_config['session_length']+60)) ? ', session_admin = 0' : '';

                                        $sql = "UPDATE " . SESSIONS_TABLE . "
                                                SET session_time = $current_time, session_page = $thispage_id$update_admin
                                                WHERE session_id = '" . $userdata['session_id'] . "'";
                                        if ( !$db->sql_query($sql) )
                                        {
                                                message_die(CRITICAL_ERROR, 'Error updating sessions table', '', __LINE__, __FILE__, $sql);
                                        }

                                        if ( $userdata['user_id'] != ANONYMOUS )
                                        {
                                                $sql = "UPDATE " . USERS_TABLE . "
                                                        SET user_session_time = $current_time, user_session_page = $thispage_id
                                                        WHERE user_id = " . $userdata['user_id'];
                                                if ( !$db->sql_query($sql) )
                                                {
                                                        message_die(CRITICAL_ERROR, 'Error updating sessions table', '', __LINE__, __FILE__, $sql);
                                                }
                                        }

                                        session_clean($userdata['session_id']);

                                        setcookie($cookiename . '_data', serialize($sessiondata), $current_time + 31536000, $cookiepath, $cookiedomain, $cookiesecure);
                                        setcookie($cookiename . '_sid', $session_id, 0, $cookiepath, $cookiedomain, $cookiesecure);
                                }

                                // Add the session_key to the userdata array if it is set
                                if ( isset($sessiondata['autologinid']) && $sessiondata['autologinid'] != '' )
                                {
                                        $userdata['session_key'] = $sessiondata['autologinid'];
                                }

                                return $userdata;
                        }
                }
        }

        //
        // If we reach here then no (valid) session exists. So we'll create a new one,
        // using the cookie user_id if available to pull basic user prefs.
        //
        $user_id = ( isset($sessiondata['userid']) ) ? intval($sessiondata['userid']) : ANONYMOUS;

        if ( !($userdata = session_begin($user_id, $user_ip, $thispage_id, TRUE)) )
        {
                message_die(CRITICAL_ERROR, 'Error creating user session', '', __LINE__, __FILE__, $sql);
        }

        return $userdata;

}

/**
* Terminates the specified session
* It will delete the entry in the sessions table for this session,
* remove the corresponding auto-login key and reset the cookies
*/
function session_end($session_id, $user_id)
{
        global $db, $lang, $board_config, $userdata;
        global $HTTP_COOKIE_VARS, $HTTP_GET_VARS, $SID;

        $cookiename = $board_config['cookie_name'];
        $cookiepath = $board_config['cookie_path'];
        $cookiedomain = $board_config['cookie_domain'];
        $cookiesecure = $board_config['cookie_secure'];

        $current_time = time();

        if (!preg_match('/^[A-Za-z0-9]*$/', $session_id))
        {
                return;
        }

        //
        // Delete existing session
        //
        $sql = 'DELETE FROM ' . SESSIONS_TABLE . "
                WHERE session_id = '$session_id'
                        AND session_user_id = $user_id";
        if ( !$db->sql_query($sql) )
        {
                message_die(CRITICAL_ERROR, 'Error removing user session', '', __LINE__, __FILE__, $sql);
        }

        //
        // Remove this auto-login entry (if applicable)
        //
        if ( isset($userdata['session_key']) && $userdata['session_key'] != '' )
        {
                $autologin_key = md5($userdata['session_key']);
                $sql = 'DELETE FROM ' . SESSIONS_KEYS_TABLE . '
                        WHERE user_id = ' . (int) $user_id . "
                                AND key_id = '$autologin_key'";
                if ( !$db->sql_query($sql) )
                {
                        message_die(CRITICAL_ERROR, 'Error removing auto-login key', '', __LINE__, __FILE__, $sql);
                }
        }

        //
        // We expect that message_die will be called after this function,
        // but just in case it isn't, reset $userdata to the details for a guest
        //
        $sql = 'SELECT *
                FROM ' . USERS_TABLE . '
                WHERE user_id = ' . ANONYMOUS;
        if ( !($result = $db->sql_query($sql)) )
        {
                message_die(CRITICAL_ERROR, 'Error obtaining user details', '', __LINE__, __FILE__, $sql);
        }
        if ( !($userdata = $db->sql_fetchrow($result)) )
        {
                message_die(CRITICAL_ERROR, 'Error obtaining user details', '', __LINE__, __FILE__, $sql);
        }
        $db->sql_freeresult($result);


        setcookie($cookiename . '_data', '', $current_time - 31536000, $cookiepath, $cookiedomain, $cookiesecure);
        setcookie($cookiename . '_sid', '', $current_time - 31536000, $cookiepath, $cookiedomain, $cookiesecure);

        return true;
}

/**
* Removes expired sessions and auto-login keys from the database
*/
function session_clean($session_id)
{
        global $board_config, $db;

        //
        // Delete expired sessions
        //
        $sql = 'DELETE FROM ' . SESSIONS_TABLE . '
                WHERE session_time < ' . (time() - (int) $board_config['session_length']) . "
                        AND session_id <> '$session_id'";
        if ( !$db->sql_query($sql) )
        {
                message_die(CRITICAL_ERROR, 'Error clearing sessions table', '', __LINE__, __FILE__, $sql);
        }

        //
        // Delete expired auto-login keys
        // If max_autologin_time is not set then keys will never be deleted
        // (same behaviour as old 2.0.x session code)
        //
        if (!empty($board_config['max_autologin_time']) && $board_config['max_autologin_time'] > 0)
        {
                $sql = 'DELETE FROM ' . SESSIONS_KEYS_TABLE . '
                        WHERE last_login < ' . (time() - (86400 * (int) $board_config['max_autologin_time']));
                $db->sql_query($sql);
        }

        return true;
}

/**
* Reset all login keys for the specified user
* Called on password changes
*/
function session_reset_keys($user_id, $user_ip)
{
        global $db, $userdata, $board_config;

        $key_sql = ($user_id == $userdata['user_id'] && !empty($userdata['session_key'])) ? "AND key_id != '" . md5($userdata['session_key']) . "'" : '';

        $sql = 'DELETE FROM ' . SESSIONS_KEYS_TABLE . '
                WHERE user_id = ' . (int) $user_id . "
                        $key_sql";

        if ( !$db->sql_query($sql) )
        {
                message_die(CRITICAL_ERROR, 'Error removing auto-login keys', '', __LINE__, __FILE__, $sql);
        }

        $where_sql = 'session_user_id = ' . (int) $user_id;
        $where_sql .= ($user_id == $userdata['user_id']) ? " AND session_id <> '" . $userdata['session_id'] . "'" : '';
        $sql = 'DELETE FROM ' . SESSIONS_TABLE . "
                WHERE $where_sql";
        if ( !$db->sql_query($sql) )
        {
                message_die(CRITICAL_ERROR, 'Error removing user session(s)', '', __LINE__, __FILE__, $sql);
        }

        if ( !empty($key_sql) )
        {
                $auto_login_key = dss_rand() . dss_rand();

                $current_time = time();

                $sql = 'UPDATE ' . SESSIONS_KEYS_TABLE . "
                        SET last_ip = '$user_ip', key_id = '" . md5($auto_login_key) . "', last_login = $current_time
                        WHERE key_id = '" . md5($userdata['session_key']) . "'";

                if ( !$db->sql_query($sql) )
                {
                        message_die(CRITICAL_ERROR, 'Error updating session key', '', __LINE__, __FILE__, $sql);
                }

                // And now rebuild the cookie
                $sessiondata['userid'] = $user_id;
                $sessiondata['autologinid'] = $auto_login_key;
                $cookiename = $board_config['cookie_name'];
                $cookiepath = $board_config['cookie_path'];
                $cookiedomain = $board_config['cookie_domain'];
                $cookiesecure = $board_config['cookie_secure'];

                setcookie($cookiename . '_data', serialize($sessiondata), $current_time + 31536000, $cookiepath, $cookiedomain, $cookiesecure);

                $userdata['session_key'] = $auto_login_key;
                unset($sessiondata);
                unset($auto_login_key);
        }
}

//
// Append $SID to a url. Borrowed from phplib and modified. This is an
// extra routine utilised by the session code above and acts as a wrapper
// around every single URL and form action. If you replace the session
// code you must include this routine, even if it's empty.
//
function append_sid($url, $non_html_amp = false, $seo_title = '')  // Seo Urls Begin Version 1.2.6
{
        global $SID, $phpEx, $topic_title, $forum_name; $userdata;

        // seo urls are disabled if url contains a session
        if ( !empty($SID) && !preg_match('#sid=#', $url) )
        {
                $url .= ( ( strpos($url, '?') !== false ) ?  ( ( $non_html_amp ) ? '&' : '&' ) : '?' ) . $SID;
                return $url;
        }

        //
        // USERSETTINGS BEGIN
        //

        // replace "true" with "false" to deactivate seo urls
        $seo_active = true;

        // how is your index page called? index.$phpEx is standard.
        // you can replace it with portal.$phpEx if necessary.
        $dir_index = "index.$phpEx";

        // Disallow rewritting for:
        // - specific url parms (f.e. 'mode=confirm', )
        // - files (f.e. "memberlist.$phpEx", )
        // - folders (f.e. 'includes/', )
        //
        $seo_forbidden = array(
                'login',
                'mode=confirm',
                'mark=topics',
                'view=',
        );

        //
        // USERSETTINGS END
        //

        if ( !$seo_active || defined('IN_ADMIN'))
        {
                return $url;
        }
        elseif ( $seo_active )
        {
                // check forbidden parms, files and folders
                foreach ( $seo_forbidden as $forbidden )
                {
                        if ( $url == $forbidden || strpos($url, $forbidden) !== false )
                        {
                                return $url;
                        }
                }
                // Url contains nothing to rewrite
                if ( $url == './' ||  $url == '' )
                {
                        return $url;
                }
                // Avoid double content on index page
                elseif ( $url == $dir_index )
                {
                        return './';
                }
                // Jumpbox Fix
                elseif ( strpos($url, 'viewforum') !== false && strpos($url, 'f=') === false )
                {
                        return $url;
                }
                // Search Author's posts url
                elseif ( strpos($url, 'search_author') !== false )
                {
                        $author_name = substr(strrchr($url, 'search_author='), 14);
                        if ( preg_match('#[^_a-zA-Z0-9-.]#', $author_name) )
                        {
                                return $url;
                        }
                }
                // Question Mark Fix: Seo Urls are disabled if the first char is a question mark. This is caused by incompatibility of some wrong written mods
                elseif ( $url{0} == '?' )
                {
                        return $url;
                }
                // Title is Array Fix: Seo Urls are disabled if topic or forum title is an array. This is caused by incompatibility of some wrong written mods
                elseif ( is_array($topic_title) )
                {
                        return $url;
                }
                elseif ( is_array($forum_name) )
                {
                        return $url;
                }

                // Hash Fix: If hash is in the given URL it is seperated. This is caused by incompatibility of some wrong written mods
                if (strpos($url, '#') !== false)
                {
                        $hash = strstr($url, '#');
                        $url = substr($url, 0, strpos($url, '#'));
                }
                else
                {
                        $hash = '';
                }

                // Rewrite url
                $url = str_replace('&', '&', $url);
                // Last Equal Sign Fix: If the last sign is an egual sign it is modified.  This is caused by incompatibility of some wrong written mods
                $url = $url{strlen($url)-1} == '=' ? $url . '0' : $url;
                // delete ugly standard parms and replace special chars
                $url_parms = array('&highlight=0','&start=0','&postdays=0','&postorder=asc','&topicdays=0',".$phpEx?",".$phpEx", '=&','=','&','?','.html');
                $url_rparms = array(           '',        '',           '',              '',            '',       ',',  '.html','=0&',',',',', '',     '');
                $url = str_replace($url_parms, $url_rparms, $url);
                // Double Comma Fix: Repeated commas are reduced to one. This is caused by incompatibility of some wrong written mods
                $url = preg_replace("#([\,])+#", "\\1", $url);
                // End Comma Fix: If a comma is the last char in the url it is deleted. This is caused by incompatibility of some wrong written mods
                $url = rtrim($url, ",");
                // Build url
                $url = $url . '.html';

                // Title to url - forums and topics need special settings
                if ( (!empty($forum_name) || !empty($seo_title) ) && strpos($url, 'viewforum') !== false )
                {
                        $seo_title = empty($seo_title) ? $forum_name : $seo_title;
                        $seo_base = 'viewforum';
                        $seo_search = array($seo_base,'-,f,');
                        $seo_replace = array(      '',  '-f');
                        $seo_empty = 'forum';
                }
                elseif ( (!empty($topic_title) || !empty($seo_title) ) && strpos($url, 'viewtopic') !== false && strpos($url, ',p,') === false )
                {
                        $seo_title = empty($seo_title) ? $topic_title : $seo_title;
                        $seo_base = 'viewtopic';
                        $seo_search = array($seo_base,'-,t,');
                        $seo_replace = array(      '',  '-t');
                        $seo_empty = 'topic';
                }

                // Title to url - replace special chars and build url
                if ( !empty($seo_base) && !empty($seo_title) && strpos($url, $seo_base) !== false )
                {
                        // special chars
                        $char_search = array('Ö', 'Ä', 'Ü', 'ö', 'ä','à','é','è','í','ó', 'ü', 'ß',' ','.',',','"','&','<', '>',  '+','–','/','_',  '&');
                        $char_replace = array('oe','ae','ue','oe','ae','a','e','e','i','o','ue','ss','-','-','-',      '',  'und',    '',     '','und','-','-','-','und');
                        // generate url with title
                        $seo_title = str_replace($char_search, $char_replace, strtolower($seo_title) . '-');
                        // remove all other special chars
                        $seo_title = preg_replace('#[^a-z0-9-]#', '', $seo_title);
                        // reduce hyphen to one
                        $seo_title = preg_replace("#([\-])+#", "\\1", $seo_title);
                        // remove hyphen if it is the first char in the title
                        $seo_title = $seo_title{0} == '-' ? substr($seo_title, 1) : $seo_title;
                        // replace empty title if necessary
                        $url = $seo_title == '-' ? $seo_empty . $seo_title . $url : $seo_title . $url;
                        // clean url
                        $url = str_replace($seo_search, $seo_replace, $url);
                }
                // Hash Fix
                $url = $url . $hash;
                return $url;
        }
} // Seo Urls End
?>