Seite 1 von 1

[BUG] BackendLogin Maske im Frontend

Verfasst: Mi 29. Aug 2007, 11:00
von Brazo Alkher
Contenido 4.6.15

wenn man im Backend am pflegen ist und dann z.B. im Firefox ein weiteren Tab auf macht um sich die Sachen im Frontend anzuschauen bekommt man statt der Inhaltsseite die Contenido (Backend) Login Maske angezeigt. Hier kann man aber einen Backend User wie man will eintippen. Man kommt nicht weiter. Problemlösung ist es die Cookies zu löschen oder alle Browserfenster zu schliessen. Da dieses nicht praktikabel ist, habe ich einige Dateien von Contenido angepasst, so dass der Pfad des Cookies für das Backend auch nur für das Backend gesetzt wird.

Nachfolgend die Anpassungen:

Dies sind 3 Dateien. Alle im conlib Ordner.

local.php ab Zeile 114: Austausch / Anpassung der Klasse "Contenido_Session"

Code: Alles auswählen

class Contenido_Session extends Session
{
	var $classname		= 'Contenido_Session';

	var $cookiename		= 'contenido';		## defaults to classname
	var $magic		= '123Hocuspocus';	## ID seed
	var $mode		= 'get';		## We propagate session IDs with cookies
	var $fallback_mode	= 'cookie';
	var $lifetime		= 0;			## 0 = do session cookies, else minutes
	var $that_class		= 'Contenido_CT_Sql';	## name of data storage container
	var $gc_probability	= 5;


	##################################################
	# Korrektur des Cookiepfades fürs Backend
	##################################################
	var $cookie_path	= null;

	function init($cfg_path)
	{
		$this->cookie_path	= '/';

		if (preg_match("/^(http\:\/\/)?(www\.)?((([a-z0-9]([\-_\.\~]*[a-z0-9])*)\.)*(([a-z0-9]([\-_\.\~]*[a-z0-9])*)\.?([a-z0-9]{2,4})?))\/?/i", $cfg_path, $regMatch))
		{
			$this->cookie_path	= '/'.str_replace($regMatch[0], '', $cfg_path);
		}
	}


	function delete ()
	{
		cInclude('classes', 'class.inuse.php');
		$col = new InUseCollection;
		$col->removeSessionMarks($this->id);

		parent::delete();
	}
}
page.inc ab Zeile 12: Austausch / Anpassung der Funktion "page_open()"

Code: Alles auswählen

function page_open($feature)
{
	global $_PHPLIB;

	global $cfg;

	# enable sess and all dependent features.
	if (isset($feature['sess']))
	{
		global $sess;
		$sess = new $feature['sess'];
		switch ($feature['sess'])
		{
			case 'Contenido_Session':
				$sess->init($cfg['path']['contenido_fullhtml']);
				break;
		}
		$sess->start();
		
	# ab hier geht es normal mit 
	#   if (isset($feature['auth']))
	# weiter
session.inc Anpassung der Klasse "Session"

nach

Code: Alles auswählen

var $cookie_domain = "";
folgendes anhängen:

Code: Alles auswählen

	var $cookie_path = "/";		## Der Pfad auf dem Server, für welchen
					## das Cookie verfügbar sein wird.
Austausch von Zeile 125 bis 151 durch:

Code: Alles auswählen

		switch ($this->mode)
		{
			case 'cookie':
				if ( $newid && ( 0 == $this->lifetime ) )
				{
					SetCookie($this->name, $id, 0, $this->cookie_path, $this->cookie_domain);
				}
				if ( 0 < $this->lifetime )
				{
					SetCookie($this->name, $id, time()+$this->lifetime*60, $this->cookie_path, $this->cookie_domain);
				}

				// Remove session ID info from QUERY String - it is in cookie
				if ( isset($QUERY_STRING) && ("" != $QUERY_STRING) )
				{
					$QUERY_STRING = ereg_replace(
						"(^|&)".quotemeta(urlencode($this->name))."=".$id."(&|$)",
						"\\1", $QUERY_STRING);
				}
				break;
			case 'get':
				if (isset($QUERY_STRING) && ('' != $QUERY_STRING))
				{
					$QUERY_STRING = ereg_replace(
						"(^|&)".quotemeta(urlencode($this->name))."=".$id."(&|$)",
						"\\1", $QUERY_STRING);
				}
				break;
			default:
				;
				break;
		}
Austausch von Zeile 159 bis 173 [function put_id()] durch:

Code: Alles auswählen

	function put_id()
	{
		global $_COOKIE;

		switch ($this->mode)
		{
			case "cookie":
				$this->name = $this->cookiename == "" ? $this->classname : $this->cookiename;
				SetCookie($this->name, "", 0, $this->cookie_path, $this->cookie_domain);
				$_COOKIE[$this->name] = "";
			break;

			default:
				// do nothing. We don't need to die for modes other than cookie here.
				break;
		}
	}

Verfasst: Mi 29. Aug 2007, 11:04
von kummer
ich fürchte, da liegt mindestens auch ein problem bei deinem browser vor. bei mir funktioniert das nämlich auch ohne anpassungen problemlos.

Verfasst: Mi 29. Aug 2007, 11:35
von HerrB
Yep, man muss nur die übergeordneten Links verwenden (also z.B. rechte Maustaste auf Content und "Öffnen in neuem Tab").

Gruß
HerrB

Verfasst: Mi 29. Aug 2007, 13:00
von Brazo Alkher
und das soll ich meinen Kunden sagen????

da packe ich lieber meinen Patch auf deren contenido Installation und die und ich haben Ruhe :-)

Verfasst: Mi 29. Aug 2007, 13:25
von kummer
nun, dafür hat man ja die vorschau. wenn ein artikel nicht online ist, wirst du ihn im frontend auch nicht anschauen können.

Verfasst: Mi 29. Aug 2007, 13:29
von Brazo Alkher
schon klar

aber das ist alles keine Lösung für ein existierendes Problem.
das sind alles Vorschläge bzw. Verfahrensweisen um das Problem zu umgehen.

Verfasst: Mi 29. Aug 2007, 13:39
von kummer
auf die gefahr hin, dass ich nerve: aber das problem, welches wir offenbar umgehen möchten, existiert in wirklichkeit - mindestens bei mir auf linux, windows und mac - weder in dieser noch in einer anderen form.

nichts für ungut... :roll:

Verfasst: Mi 29. Aug 2007, 14:19
von wosch
Brazo Alkher hat geschrieben:aber das ist alles keine Lösung für ein existierendes Problem.
das sind alles Vorschläge bzw. Verfahrensweisen um das Problem zu umgehen
Allerdings habe ich bei mir ebenfalls KEIN Problem.
Ich kann mit dem FF in einem Tab im Backend lustig editieren und im anderen Tab im Frontend das Ergebnis betrachten.
Bei mir kommen sich im FF oder im Opera Backend und Frontend nicht in die Quere.

Verfasst: Mi 29. Aug 2007, 15:23
von Dalamar
Bei mir funzt das auch wunderbar...

Christian