Seite 1 von 2

Gäste von Index verbannen

Verfasst: 29.05.2007 02:00
von ArnoNyhm123
Hallo Leute,

da ich nicht genau wusste, wohin mit diesem Posting, habe ich es mal in den Smalltalk gesetzt. Sollte es hier falsch sein, bitte ich um Entschuldigung und darum, es bitte an den rechten Platz zu verschieben.

So, nun zu meiner Frage / Problemstellung:

1. User betritt die Index-Datei

2. zu Beginn der Index-Datei soll irgendwie der Status des Users geprüft werden.

2.1. der User ist eingelogt mit Status "registriert" oder höher
2.1.1. User darf Forum wie gewohnt sehen und nutzen

2.2. der User ist nicht eingelogt bzw. hat den Status "Gast".
2.2.1. in diesem Fall soll der Gast, noch bevor er einen Blick auf die Index werfen kann, per Weiterleitung auf eine andere Page (eine Page, auf der nur ein LogIn-Feld ist) umgeleitet werden.

Meine Frage ist nun: Wie könnte ich solch eine Statusabfrage mit entsprechender Umleitung realisieren?

Bin für jeden Tipp dankbar, da ich Null Plan davon habe.

Verfasst: 29.05.2007 09:41
von killerbees19
Soll das ganze nur für die Index-Seite sein, oder für alle Seiten deines Forums?

Das ganze ist jedenfalls ganz leicht zu realisieren, man muss nur jeden auf die Loginseite weiterleiten :wink:
Bitte mache vorher ein Backup aller Dateien deines Forums!
Dafür musst du in jede Datei, die ein Gast nicht sehen soll, nach diesem Teil:

Code: Alles auswählen

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//
folgendes einfügen:

Code: Alles auswählen

// Ist der Benutzer eingeloggt?
if(!$userdata['session_logged_in'])
{
	redirect(append_sid('login.'.$phpEx.'?redirect='.basename($_SERVER['PHP_SELF']).'&'.$_SERVER['QUERY_STRING'], true));
}

MfG Christian

Verfasst: 29.05.2007 10:48
von ArnoNyhm123
killerbees19 hat geschrieben:Soll das ganze nur für die Index-Seite sein, oder für alle Seiten deines Forums?
Eigentlich für alle. Reicht es dann nicht, es nur in die Index zu setzen?

killerbees19 hat geschrieben:Das ganze ist jedenfalls ganz leicht zu realisieren, man muss nur jeden auf die Loginseite weiterleiten :wink:
Bitte mache vorher ein Backup aller Dateien deines Forums!
Dafür musst du in jede Datei, die ein Gast nicht sehen soll, nach diesem Teil:

Code: Alles auswählen

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//
folgendes einfügen:

Code: Alles auswählen

// Ist der Benutzer eingeloggt?
if(!$userdata['session_logged_in'])
{
	redirect(append_sid('login.'.$phpEx.'?redirect='.basename($_SERVER['PHP_SELF']).'&'.$_SERVER['QUERY_STRING'], true));
}

MfG Christian
Wo definiere ich denn die URL der Page, auf die er dann weiter geleitet werden soll? Also die, die nur das LogIn haben soll?

Verfasst: 29.05.2007 12:21
von killerbees19
Jeder könnte aber trotzdem die Suche, Forenthemen usw. aufrufen. Du müsstest den Code also in alle Seiten schreiben, die Gäste nicht sehen sollen.

Die Seite auf die Weitergeleitet werden soll, wird hier definiert:

Code: Alles auswählen

'login.'.$phpEx.'?redirect='.basename($_SERVER['PHP_SELF']).'&'.$_SERVER['QUERY_STRING']
Die Login-Seite, und falls sich dann jemand einloggt, kommt er wieder auf die Seite zurück, die er eigentlich sehen wollte :wink:


MfG Christian

Verfasst: 29.05.2007 16:23
von Asmodiel
wenn dein ganzes forum nicht für gäste sein soll, pack es einfach in die includes/page_header.php und schon sind alle (mit header und style ausgestatteten) seiten davon betroffen.

Verfasst: 29.05.2007 21:08
von ArnoNyhm123
Habs mal probiert und habe

Code: Alles auswählen

// Ist der Benutzer eingeloggt? 
if(!$userdata['session_logged_in']) 
{ 
redirect(append_sid('login.'.$phpEx.'?redirect='.basename($_SERVER['PHP_SELF']).'&'.$_SERVER['QUERY_STRING'], true)); 
}
oben in die includes/page_header kopiert.
Aber sobald ich mich auslogge um den Gaststatus zu testen, kommt nur noch "SEITE NICHT GEFUNDEN". :(

Verfasst: 29.05.2007 22:35
von Asmodiel
könnte an der relativen angabe der login.php... mach mal aus dem
append_sid('login.'.$phpEx.
ein
append_sid('http://deineseite.de/deinforum/login.'.$phpEx. [...]

Verfasst: 29.05.2007 23:36
von ArnoNyhm123
Irgendwie will das nicht funktionieren.

Habe es wie folgt eingebaut in die includes/page_header.php

Code: Alles auswählen

<?php
/***************************************************************************
 *                              page_header.php
 *                            -------------------
 *   begin                : Saturday, Feb 13, 2001
 *   copyright            : (C) 2001 The phpBB Group
 *   email                : support@phpbb.com
 *
 *   $Id: page_header.php,v 1.106.2.25 2005/10/30 15:17:14 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.
 *
 ***************************************************************************/

// Ist der Benutzer eingeloggt? 
if(!$userdata['session_logged_in']) 
{ 
redirect(append_sid('http://www.ehtac.de/phpbb2/login.'.$phpEx.'?redirect='.basename($_SERVER['PHP_SELF']).'&'.$_SERVER['QUERY_STRING'], true)); 
} 


if ( !defined('IN_PHPBB') )
{
	die("Hacking attempt");
}

define('HEADER_INC', TRUE);

//
// gzip_compression
//
$do_gzip_compress = FALSE;
if ( $board_config['gzip_compress'] )
{
	$phpver = phpversion();

	$useragent = (isset($HTTP_SERVER_VARS['HTTP_USER_AGENT'])) ? $HTTP_SERVER_VARS['HTTP_USER_AGENT'] : getenv('HTTP_USER_AGENT');

	if ( $phpver >= '4.0.4pl1' && ( strstr($useragent,'compatible') || strstr($useragent,'Gecko') ) )
	{
		if ( extension_loaded('zlib') )
		{
			ob_start('ob_gzhandler');
		}
	}
	else if ( $phpver > '4.0' )
	{
		if ( strstr($HTTP_SERVER_VARS['HTTP_ACCEPT_ENCODING'], 'gzip') )
		{
			if ( extension_loaded('zlib') )
			{
				$do_gzip_compress = TRUE;
				ob_start();
				ob_implicit_flush(0);

				header('Content-Encoding: gzip');
			}
		}
	}
}


... und so weiter ...
Selbst bei der Index-Datei kommt so ein Fehler 404

Verfasst: 29.05.2007 23:58
von metty84
ist ja kein wunder so versucht er immer neu zu verbinden zu loginseite selbst wen man schon auf der loginseite ist das führt unweigerlich zu nem timeout!

entweder du bindest das in jeder datei einzeln ein oder du machst dem script noch klar das ews bei der login.php nicht neuverbinden soll.

z.b. so
in der login.php vor

Code: Alles auswählen

include($phpbb_root_path . 'includes/page_header.'.$phpEx);
das einfügen

Code: Alles auswählen

define('NO_REDIRECT', true);
in der pageheader.php

Code: Alles auswählen

// Ist der Benutzer eingeloggt? 
if(!$userdata['session_logged_in']) 
{ 
redirect(append_sid('http://www.ehtac.de/phpbb2/login.'.$phpEx.'?redirect='.basename($_SERVER['PHP_SELF']).'&'.$_SERVER['QUERY_STRING'], true)); 
} 
ersetzen mit

Code: Alles auswählen

// Ist der Benutzer eingeloggt? 
if(!$userdata['session_logged_in'] && !(defined('NO_REDIRECT')) ) 
{ 
redirect(append_sid('http://www.ehtac.de/phpbb2/login.'.$phpEx.'?redirect='.basename($_SERVER['PHP_SELF']).'&'.$_SERVER['QUERY_STRING'], true)); 
} 
damit !!!könnte!!! es funktionieren wen nicht irgend ne andere dei da probleme macht was ich nicht weis weil ichs nicht ausprobiert habe.

mfg metty

Verfasst: 30.05.2007 00:05
von ArnoNyhm123
das gleiche Ergebnis ... Fehler 404 :(

Edit:
ohne den absoluten Pfad scheint es so zu klappen. :)

Also mit:

Code: Alles auswählen

redirect(append_sid('login.'.$phpEx.'?redirect='.basename($_SERVER['PHP_SELF']).'&'.$_SERVER['QUERY_STRING'], true)); 
Werde das mal so drin lassen und testen.
Aber auf den ersten Blick scheints zu klappen.

Ich laß dir in den nächsten Tagen auf jeden Fall Feedback da. DANKE schon mal!