Gå til innhold

Finne ut om bruker er online i phpBB 2.0.22


Anbefalte innlegg

Heisann. Jeg lager en liten portal til et phpBB 2.0.22 forum og jeg skulle gjerne funnet ut om brukeren er logget inn gjennom forumet eller ikke. Hvordan finner man ut det?

 

Har prøvd flere forskjellige måter, men ingen av dem gir utslag for at brukeren er loget inn selv om jeg er det når jeg tester.

 

Fila ligger ikke i samme mappe som alle de andre forum's filene.

 

SPOILERWARNING: LANG TEKST

 

Klikk for å se/fjerne innholdet nedenfor
<?php
/***************************************************************************
*                                login.php
*                            -------------------
*   begin : Saturday, Feb 13, 2001
*   copyright            : © 2001 The phpBB Group
*   email                : [email protected]
*
*   $Id: login.php,v 1.47.2.25 2006/12/16 13:11:24 acydburn 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.
*
***************************************************************************/

//
// Allow people to reach login page if
// board is shut down
//
define("IN_LOGIN", true);

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

//
// Set page ID for session management
//
$userdata = session_pagestart($user_ip, PAGE_LOGIN);
init_userprefs($userdata);
//
// End session management
//

// session id check
if (!empty($HTTP_POST_VARS['sid']) || !empty($HTTP_GET_VARS['sid']))
{
$sid = (!empty($HTTP_POST_VARS['sid'])) ? $HTTP_POST_VARS['sid'] : $HTTP_GET_VARS['sid'];
}
else
{
$sid = '';
}

if( isset($HTTP_POST_VARS['login']) || isset($HTTP_GET_VARS['login']) || isset($HTTP_POST_VARS['logout']) || isset($HTTP_GET_VARS['logout']) )
{
if( ( isset($HTTP_POST_VARS['login']) || isset($HTTP_GET_VARS['login']) ) && (!$userdata['session_logged_in'] || isset($HTTP_POST_VARS['admin'])) )
{
	$username = isset($HTTP_POST_VARS['username']) ? phpbb_clean_username($HTTP_POST_VARS['username']) : '';
	$password = isset($HTTP_POST_VARS['password']) ? $HTTP_POST_VARS['password'] : '';

	$sql = "SELECT user_id, username, user_password, user_active, user_level, user_login_tries, user_last_login_try
		FROM <span style='color:red'>" . USERS_TABLE . "
		WHERE username = '" . str_replace("\\'", "''", $username) . "'";
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Error in obtaining userdata', '', __LINE__, __FILE__, $sql);
	}

	if( $row = $db->sql_fetchrow($result) )
	{
		if( $row['user_level'] != ADMIN && $board_config['board_disable'] )
		{
			redirect(append_sid("index.$phpEx", true));
		}
		else
		{
			// If the last login is more than x minutes ago, then reset the login tries/time
			if ($row['user_last_login_try'] && $board_config['login_reset_time'] && $row['user_last_login_try'] < (time() - ($board_config['login_reset_time'] * 60)))
			{
				$db->sql_query('UPDATE ' . USERS_TABLE . ' SET user_login_tries = 0, user_last_login_try = 0 WHERE user_id = ' . $row['user_id']);
				$row['user_last_login_try'] = $row['user_login_tries'] = 0;
			}

			// Check to see if user is allowed to login again... if his tries are exceeded
			if ($row['user_last_login_try'] && $board_config['login_reset_time'] && $board_config['max_login_attempts'] && 
				$row['user_last_login_try'] >= (time() - ($board_config['login_reset_time'] * 60)) && $row['user_login_tries'] >= $board_config['max_login_attempts'] && $userdata['user_level'] != ADMIN)
			{
				message_die(GENERAL_MESSAGE, sprintf($lang['Login_attempts_exceeded'], $board_config['max_login_attempts'], $board_config['login_reset_time']));
			}

			if( md5($password) == $row['user_password'] && $row['user_active'] )
			{
				$autologin = ( isset($HTTP_POST_VARS['autologin']) ) ? TRUE : 0;

				$admin = (isset($HTTP_POST_VARS['admin'])) ? 1 : 0;
				$session_id = session_begin($row['user_id'], $user_ip, PAGE_INDEX, FALSE, $autologin, $admin);

				// Reset login tries
				$db->sql_query('UPDATE ' . USERS_TABLE . ' SET user_login_tries = 0, user_last_login_try = 0 WHERE user_id = ' . $row['user_id']);

				if( $session_id )
				{
					$url = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : "index.$phpEx";
					redirect(append_sid($url, true));
				}
				else
				{
					message_die(CRITICAL_ERROR, "Couldn't start session : login", "", __LINE__, __FILE__);
				}
			}
			// Only store a failed login attempt for an active user - inactive users can't login even with a correct password
			elseif( $row['user_active'] )
			{
				// Save login tries and last login if ($row['user_id'] != ANONYMOUS)
				{
					$sql = 'UPDATE ' . USERS_TABLE . '
						SET user_login_tries = user_login_tries + 1, user_last_login_try = ' . time() . '
						WHERE user_id = ' . $row['user_id'];
					$db->sql_query($sql);
				}
			}

			$redirect = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : '';
			$redirect = str_replace('?', '&', $redirect);

			if (strstr(urldecode($redirect), "\n") || strstr(urldecode($redirect), "\r") || strstr(urldecode($redirect), ';url'))
			{
				message_die(GENERAL_ERROR, 'Tried to redirect to potentially insecure url.');
			}

			$template->assign_vars(array(
				'META' => "<meta http-equiv=\"refresh\" content=\"3;url=login.$phpEx?redirect=$redirect\">")
			);

			$message = $lang['Error_login'] . '<br /><br />' . sprintf($lang['Click_return_login'], "<a href=\"login.$phpEx?redirect=$redirect\">", '</a>') . '<br /><br />' .  sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>');

			message_die(GENERAL_MESSAGE, $message);
		}
	}
	else
	{
		$redirect = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : "";
		$redirect = str_replace("?", "&", $redirect);

		if (strstr(urldecode($redirect), "\n") || strstr(urldecode($redirect), "\r") || strstr(urldecode($redirect), ';url'))
		{
			message_die(GENERAL_ERROR, 'Tried to redirect to potentially insecure url.');
		}

		$template->assign_vars(array(
			'META' => "<meta http-equiv=\"refresh\" content=\"3;url=login.$phpEx?redirect=$redirect\">")
		);

		$message = $lang['Error_login'] . '<br /><br />' . sprintf($lang['Click_return_login'], "<a href=\"login.$phpEx?redirect=$redirect\">", '</a>') . '<br /><br />' .  sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>');

		message_die(GENERAL_MESSAGE, $message);
	}
}
else if( ( isset($HTTP_GET_VARS['logout']) || isset($HTTP_POST_VARS['logout']) ) && $userdata['session_logged_in'] )
{
	// session id check
	if ($sid == '' || $sid != $userdata['session_id'])
	{
		message_die(GENERAL_ERROR, 'Invalid_session');
	}

	if( $userdata['session_logged_in'] )
	{
		session_end($userdata['session_id'], $userdata['user_id']);
	}

	if (!empty($HTTP_POST_VARS['redirect']) || !empty($HTTP_GET_VARS['redirect']))
	{
		$url = (!empty($HTTP_POST_VARS['redirect'])) ? htmlspecialchars($HTTP_POST_VARS['redirect']) : htmlspecialchars($HTTP_GET_VARS['redirect']);
		$url = str_replace('&', '&', $url);
		redirect(append_sid($url, true));
	}
	else
	{
		redirect(append_sid("index.$phpEx", true));
	}
}
else
{
	$url = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : "index.$phpEx";
	redirect(append_sid($url, true));
}
}
else
{
//
// Do a full login page dohickey if
// user not already logged in //
if( !$userdata['session_logged_in'] || (isset($HTTP_GET_VARS['admin']) && $userdata['session_logged_in'] && $userdata['user_level'] == ADMIN))
{
	$page_title = $lang['Login'];
	include($phpbb_root_path . 'includes/page_header.'.$phpEx);

	$template->set_filenames(array(
		'body' => 'login_body.tpl')
	);

	$forward_page = '';

	if( isset($HTTP_POST_VARS['redirect']) || isset($HTTP_GET_VARS['redirect']) )
	{
		$forward_to = $HTTP_SERVER_VARS['QUERY_STRING'];

		if( preg_match("/^redirect=([a-z0-9\.#\/\?&=\+\-_]+)/si", $forward_to, $forward_matches) )
		{
			$forward_to = ( !empty($forward_matches[3]) ) ? $forward_matches[3] : $forward_matches[1];
			$forward_match = explode('&', $forward_to);

			if(count($forward_match) > 1)
			{
				for($i = 1; $i < count($forward_match); $i++)
				{
					if( !ereg("sid=", $forward_match[$i]) )
					{
						if( $forward_page != '' )
						{
							$forward_page .= '&';
						}
						$forward_page .= $forward_match[$i];
					}
				}
				$forward_page = $forward_match[0] . '?' . $forward_page;
			}
			else
			{
				$forward_page = $forward_match[0];
			}
		}
	}

	$username = ( $userdata['user_id'] != ANONYMOUS ) ? $userdata['username'] : '';

	$s_hidden_fields = '<input type="hidden" name="redirect" value="' . $forward_page . '" />';
	$s_hidden_fields .= (isset($HTTP_GET_VARS['admin'])) ? '<input type="hidden" name="admin" value="1" />' : '';

	make_jumpbox('viewforum.'.$phpEx);
	$template->assign_vars(array(
		'USERNAME' => $username,

		'L_ENTER_PASSWORD' => (isset($HTTP_GET_VARS['admin'])) ? $lang['Admin_reauthenticate'] : $lang['Enter_password'],
		'L_SEND_PASSWORD' => $lang['Forgotten_password'],

		'U_SEND_PASSWORD' => append_sid("profile.$phpEx?mode=sendpassword"),

		'S_HIDDEN_FIELDS' => $s_hidden_fields)
	);

	$template->pparse('body');

	include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
}
else
{
	redirect(append_sid("index.$phpEx", true));
}

}

?>

 

Hvis noen kunne hjulpet meg hadde det vært veldig fint. Venter på svar :)

 

- Th0mas^

Endret av TheClown
Lenke til kommentar
Videoannonse
Annonse

Nå har ikke jeg sett på den vedlagte koden din, men phpbb har jo session-id'en i url-feltet når man er logget inn. Dette for å kunne følge brukeren, og brukere som ikke har cookies på osv..

 

Er en egen funksjon for dette hvis man skal bruke innloggingen på sider utenfor phpbb. Append_sid($url), denne må du kjøre på alle linker du har til egen side.

 

Men ellers så burde det bare å lete etter sid i url-feltet, er det en sid der så er brukeren innlogget gjennom phpbb.

 

Hvis jeg ikke har misforstått veldig da, noe jeg kan ha gjort føler jeg ;)

Lenke til kommentar

står ikke noe ekstra i urlen, nei. I allefall ikke når jeg er rundt på forumet mitt... Jo, med en gang man logger inn (før man trykker noe annet) får man et sid= i urlen. Men borsett fra den er det ikkenoe annet som forteller at du er online gjennom urlen.

Endret av TheClown
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...