Session Time im Frontend extrem kurz

Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Re: Session Time im Frontend extrem kurz

Beitrag von Dodger77 »

Bist du wieder auf die 4.8.13 zurück gegangen? Sieht zumindest für mich danach auch (Meta-Angaben im Frontend).

Ansonsten kann ich das Problem wohl jetzt nachstellen. Die Session bleibt wohl auch lange bestehen, aber sobald ich die geschützte Kategorie aufgerufen habe und mache danach etwas anderes (nichtgeschützte Kategorie auswählen oder das Drop-Down verwenden) ist die Session weg. Da ich das in eigenen 4.8.13-/4.8.14-Installationen nicht nachvollziehen kann, dass dies durch den Aufruf einer geschützten Kategorie passiert, würde ich also auf die dort eingesetzten Module tippen.

Um ein Problem seitens Contenido zu bestätigen oder auszuschließen, würde ich dich bitten, eine weitere geschützte Kategorie ohne die Module aus der aktuell geschützten Kategorie anzulegen, auf die entsprechende Frontend-Benutzer Zugriff erhalten. Wenn das Problem dort nachzustellen ist oder nicht, können wir evtl. besser beurteilen, wo das Problem liegt.
Tom Quenten
Beiträge: 125
Registriert: Do 10. Jun 2004, 13:55
Wohnort: Gallinchen
Kontaktdaten:

Re: Session Time im Frontend extrem kurz

Beitrag von Tom Quenten »

Also das mit den META Angaben wundert mich jetzt auch ganz gewaltig. Das Backend ist definitv 4.8.14., im Frontend habe ich die Ordner

Code: Alles auswählen

include
version
erneuert. Version ist jedoch gar nict notwendig denke ich, da ja hier nur meine Modulversionen gespeichert sind.

Die anderen Ordner sind Individualdaten und sollten eigentlich nichts mit dem System an sich zu tun haben. Selbstverständlich habe ich auch noch die

Code: Alles auswählen

front_content.php
front_crcloginform.inc.php
index.php
dbfs.php
erneuert. Das jetzt in den META Tags trotzdem 4.8.13. erscheint.....*grübel*

Das es an einem meiner Module liegen könnte befürchte ich auch schon fast. Habe mir daher die Nacht noch weitere Gedanken gemacht. Ich war früh eingeloggt, und das gefült länger als 3 Minuten, als ich dann auf die geschütze Kat geclickt hatte war ich draussen. Was mich aber wundert ist die Tatsache, sollte es tatsächlich an eins meiner eigenen Module liegen, wieso hat es vorher funktioniert? An das Session Object geh ich gar nicht ran, ich hab n eigenes Datenbank-Object was die Zugriffe auf die MySQL DB regelt.

Ganz sicher werde ich aber heute abend noch mal einiges probieren und weiter berichten!

Danke für die bisherige Unterstützung!!!

Tom Quenten
Wer fragt, ist ein Narr für fünf Minuten.
Wer nicht fragt, bleibt es für immer.

Handy doof? Tarif doof? Rechnung zu hoch?
Unter www.cottbushandy.de wird dir sicher geholfen!
Tom Quenten
Beiträge: 125
Registriert: Do 10. Jun 2004, 13:55
Wohnort: Gallinchen
Kontaktdaten:

Re: Session Time im Frontend extrem kurz

Beitrag von Tom Quenten »

Also ich hab das jetzt mal weiter getestet......es wird wohl doch an einem meiner Module liegen...ich werde diese also der Reihe nach deaktivieren um heraus zu finden an welchm es nun liegt.

Was mich wundert und ich nicht nachvollziehen kann sind die META Tags mit der 4.8.13. Woher kommt diese Information?
Und
Was kann den Sitzungsabbruch verursachen.....das ist jetzt nicht auf mein wohl fehlerhaftes Modul bezogen sondern allgemein gemeint. Ich würde wissen wollen wonach ich eigentlich suchen muss um den Fehler innerhalb meiner Module zu finden. Ist es evtl. erforderlich die Datenbank upzudaten von der 4.8.11 auf die 4.8.14, ich meine hat sich da irgendwa noch geändert an dem Design zwischen diesen Versionen????

Tom Quenten
Wer fragt, ist ein Narr für fünf Minuten.
Wer nicht fragt, bleibt es für immer.

Handy doof? Tarif doof? Rechnung zu hoch?
Unter www.cottbushandy.de wird dir sicher geholfen!
idea-tec
Beiträge: 1242
Registriert: Do 19. Sep 2002, 14:41
Wohnort: Dichtelbach
Kontaktdaten:

Re: Session Time im Frontend extrem kurz

Beitrag von idea-tec »

wen du das nun selbst vermutest/annimmst, dann mach es dir und uns doch einfach(er):
entweder alle module raus, und eines nach dem anderen rein, bis nichts mehr funktioniert
- das modul ist erkannt
oder ein modul nach dem anderen rausnehmen bis alles fehlerfrei funktioniert
- das modul ist auch erkannt

danach kann man sich das ansehen und deine frage nach der ursache beantworten
MfG, Karsten
Nicht Können bedeutet nicht, dass man etwas nicht beherrscht, sondern lediglich, dass man sich nicht traut es zu tun ;-)
| Internet | Ihr Logo deutschlandweit auf T-Shirts |
Diplomatie: Jemanden so in die Hölle zu schicken, dass er sich auf die Reise freut!!! ;-)
Tom Quenten
Beiträge: 125
Registriert: Do 10. Jun 2004, 13:55
Wohnort: Gallinchen
Kontaktdaten:

Re: Session Time im Frontend extrem kurz

Beitrag von Tom Quenten »

Hallo,

gesagt, getan.

Es liegt wohl an meiner Klasse die ich geschrieben habe. Ich kann es zwar noch nicht so ganz nachvollziehen warum und was da genau passiert aber das werde ich morgen mal schrittweise überprüfen - das wurmt mich gewaltig!

In den neuen Versionen (4.8.13 sowie 4.8.14) muss sich aber was getan haben was die Authentifizierung angeht.

Was meine Klasse genau tut....

Ein Frontenduser, für mich sind das Dealer, kann mehreren Gruppen, in meiner Theorie entspricht das Onlineshops, zugehören. Da alle administrativen Einstellungen von allen Dealern (Frontendusern) in meine dafür angelegten Tabellen geschrieben werden ist es zwingend notwendig die GroupID in die jeweiligen Datensätze mitzuschreiben. Aus diesem Grund war ich dann auch gezwungen eine Klasse zu schreiben.

Wenn ein Modul aufgerufen wird, übergebe ich die UserID in meine Klasse. Dort wird geprüft ob dieser User einer oder mehreren Gruppen angehört. Gehört er einer Gruppe an, wird die GroupID der Konstanten $dealer_group_selection zugewiesen. Der Dealer bekommt davon nichts mit. Interessant wird es, wenn der Dealer MEHRERE Onlineshops administriert. Ist also das Ergebnis der möglichen Gruppen größer 1 wird dem User eine Auswahlmöglichkeit gegeben, WELCHE Gruppe er nun bearbeiten möchte.

Und weil das eigentlich soo simpel ist, kann ich es eben nicht nachvollziehen was hier einen Sessionabbruch auslösen soll. Ich werde morgen nach dem probieren den Code der überprüften Klasse veröffentlichen.

Sollte jedoch jemand so eine Problemstellung schon einmal gehabt und diese evtl. auch erfolgreich gelöst haben, wäre ich um Hilfe sehr dankbar.

Tom Quenten



@edit
eine Sache noch die mir aufgefallen....
Bei einem var_dump($sess) habe ich bemerkt das die Variable $lifetime = 0 ist. In meiner /conlib/local.php steht im Abschnitt Contenido_Challenge_Crypt_Auth

Code: Alles auswählen

 var $lifetime       =  15;
$lifetime steht zwar mehrmals in der local.php definiert aufgrund das es mehrere Klassen sind die hier stehen, daher würde mich brennend interessieren um welchen Wert es sich hier in dem Object $sess eigentlic handelt.
Wer fragt, ist ein Narr für fünf Minuten.
Wer nicht fragt, bleibt es für immer.

Handy doof? Tarif doof? Rechnung zu hoch?
Unter www.cottbushandy.de wird dir sicher geholfen!
Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Re: Session Time im Frontend extrem kurz

Beitrag von Dodger77 »

Interessant dürfte für dich ja eher:

Code: Alles auswählen

var_dump($auth);
sein.

$lifetime der Contenido_Frontend_Session (Klasse in der conlib/local.php) ist als Standard auf 0 gesetzt, so dass Session-Cookies gesetzt werden. Das sollte keine Probleme verursachen.

Eine Idee für eine mögliche Ursache wäre evtl. ein Typo, der z.B. statt den Namen des FE-Users abfragt eben diesen zuweist:

Code: Alles auswählen

if ($auth->auth["uname"] == "nobody") {
  // ausführen, wenn der User nicht eingeloggt ist
}

if ($auth->auth["uname"] = "nobody") {
  // immer ausführen, Name des Users wird auf nobody gesetzt
}
Tom Quenten
Beiträge: 125
Registriert: Do 10. Jun 2004, 13:55
Wohnort: Gallinchen
Kontaktdaten:

Re: Session Time im Frontend extrem kurz

Beitrag von Tom Quenten »

So ich habe jetzt mal so einiges analysiert. Die Ladezeit ist wie o. schon geschrieben recht lang geworden. Die Ursache konnte ich schon erst einmal ausmachen. Ich habe auf dem 2. TFT immer den Server im Blick unter anderem auch den MySQL Admin zu laufen um den Status zu sehen. Bei einem Aufruf meiner Seite schlugen die Number of MySQL Querys wahre Purzelbäume. Ein Blick in die Logs brachte dann auch die Ursache zu Tage. Da ich damals das Artikellistenmodul umgeschrieben habe welches Andreas zur Verfügung stellte, waren natürlich nach ich glaube 6 Jahren die MySQL Querys nicht mehr korrekt, da sich MySQL ja auch weiterentwickelt. Da ich mich NIE darum gekümmert habe ist mir das nun mal auf die Füße gefallen.

Also werde ich mich als erstes damit beschäftigen müssen. Sowie dies geklärt ist, evtl. 2 Tage, werde ich mich dann meinem eigentlichen Problem noch mal annähern um eben auch auszuschließen das MÖGLICHERWEISE die Ursache auch von meinen veralteten Modulen herkommt.

Na dan bin ich ja mal gespannt wo mich die Reise hier noch hinführt....

Tom Quenten
Wer fragt, ist ein Narr für fünf Minuten.
Wer nicht fragt, bleibt es für immer.

Handy doof? Tarif doof? Rechnung zu hoch?
Unter www.cottbushandy.de wird dir sicher geholfen!
Tom Quenten
Beiträge: 125
Registriert: Do 10. Jun 2004, 13:55
Wohnort: Gallinchen
Kontaktdaten:

Re: Session Time im Frontend extrem kurz

Beitrag von Tom Quenten »

Hallo,

hier nun ein Zwischenbericht und noch einige Fragen an die Entwickler von Contendio.

1. Ausgangssituation
  • Contenido 4.8.14
    7 Mandanten
    V-Server
    MySQL Server 5.1.14
2. Probleme

2.1. MySQL Querys
Wie schon in meinem letzten Beitrag erwänt, hatte ich zum Teil recht alte MySQL Querys in den Modulen. Ich rede hier jetzt von nicht eingeklammerten FROM Abschnitten einer MySQL Anfrage in Verbindung mit JOINS, was bei neueren MySQL Versionen, so wie ich Sie nun mittlerweile einsetze zu recht hohen Auslastungen des MySQL Servers führt und letzlich zu Fehlermeldungen. Was mich hier jedoch verwundert ist die Tatsache das im ErrorLog MySQL Querys als fehlerhaft eingetragen wurden, die es zwar sind, jedoch nicht von meinem aktuellen Mandanten verursacht wurden. Der Mandant der dies verursacht stellt meine Private Website dar und da ist definitiv keiner drauf gewesen, auch keine Cronjobs. Im Klartext ganz kurz geschrieben....
  • Errorlog geleert
    auf meine geschäftliche Website geklickt
    MySQL Querys im MySQL Admin schlagen Purzelbäume
    Website hat sich aufgebaut
    im Errorlog stehen unbestritten fehlerhafte MySQL Querys, nur eben von einem vollkommen anderen Mandanten
2.2. meine eigene Klasse zur Gruppenselection
Wie auch schon in meinem letzten Beitrag angesprochen, verursacht höchstwahrscheinlich meine Klasse einen Sessionabbruch seit der Version 4.8.13. Ich habe nun versucht festzustellen warum und habe daher einiges ausprobiert und mir immer wieder var_dumps ausgeben lassen. Leider bin ich keinen Schritt weiter. Ich poste hier jetzt einmal die seit der Version 4.8.13 FEHLERBEHAFTETE Klasse

Code: Alles auswählen

<?php
/***
 * bigsystems shopconfig class
 * managed shopconfig data from bigsystems webportal
 * created 2010-05-25
 * by bigsystems.de | andre domaschke
 */
require_once('/srv/www/htdocs/ks012/config/config_sql.php');
class shopconfig {

 	var $TABLE_PRODUCTS_DOWNLOAD_MARGE = 'products_download_marge';
	var $db_host = dbHost; 
	var $db_name = dbName; 
	var $db_user = dbUser; 
	var $db_pwd  = dbPwd;

	var $dealer_data;						//array, wird bei classenaufruf vom script übergeben

	var $dealer_group_id;				//group_id ODER group_id´s mit bindestrich getrennt
	var $dealer_group_name;			//group_name ODER group_names mit komma getrennt
	var $dealer_group_count;		//anzahl der groups die dem user zur auswahl stehen
	var $dealer_group_sql;			//group string for mysql
	var $dealer_groups;					//array mit allen gruppen auf die die user_id zugreifen darf
	var $dealer_group_selected;	//enthält genau eine selectierte group_id bei mehrfachauswahl, sonst standard

	var $dealer_user_id;				//user_id
	var $dealer_user_name;			//user_name

	var $dealer_edit_matrix;

	var $connect_id;
	var $result;
	var $erg;

	/*****
	 * constructor
	 * db connection management
	 * 2010-05-25
	 * @param $db_name
	 */
	function shopconfig($dealer_data){

		if(array_key_exists('db', $dealer_data)){
			$this->db_host = $dealer_data['db']['host'];
			$this->db_name = $dealer_data['db']['name'];
			$this->db_user = $dealer_data['db']['user'];
			$this->db_pwd	 = $dealer_data['db']['pwd'];
		}

		$this->dealer_data				= $dealer_data;
		$this->dealer_user_id			= $dealer_data['dealer_user_id'];
		if(array_key_exists('dealer_group_selected', $dealer_data))
			$this->dealer_group_selected		= $dealer_data['dealer_group_selected'];
		if(array_key_exists('dealer_user_name', $dealer_data))
			$this->dealer_user_name 	= $dealer_data['dealer_user_name'];
		if(array_key_exists('dealer_group_name', $dealer_data))
			$this->dealer_group_name	= $dealer_data['dealer_group_name'];
		if(array_key_exists('dealer_edit_matrix', $dealer_data))
			$this->dealer_edit_matrix	= $dealer_data['dealer_edit_matrix'];

		/***
		 * created connection_id
		 */
		if(!$this->connect_id = mysql_connect($this->db_host,$this->db_user,$this->db_pwd)){
			$message = 'Fehlercode 1';
		}elseif(!$this->db_select($this->db_name)){
			$message = 'Fehlercode 2';
		}
		$this->connect_id;

		/***
		 * get user group count
		 */
		$sql = "
			SELECT	count(*) AS count,
							fg.idfrontendgroup,
							fg.groupname
			FROM		cms_frontendgroups fg,
							cms_frontendgroupmembers fgm,
							cms_frontendusers fu
			WHERE		fg.idfrontendgroup = fgm.idfrontendgroup
			AND			fgm.idfrontenduser = fu.idfrontenduser
			AND			fgm.idfrontenduser = '".$this->dealer_user_id."'
		";
		$query = $this->query($sql);
		$group_count = mysql_fetch_array($query, true);
		$this->dealer_group_count = $group_count['count'];

		if($this->dealer_group_count == 1){

			$this->dealer_group_id = $group_count['idfrontendgroup'];
			$this->dealer_group_name = $group_count['groupname'];
			$this->dealer_group_selected = $group_count['idfrontendgroup'];

		}else{

			/***
			 * user hat mehere groups zur auswahl
			 */
			if(empty($this->dealer_group_selected)){

				$this->get_all_user_groups();

			}else{

				/***
				 * prüfe übergebende daten auf plausibilität
				 */
				$sql = "
					SELECT	fg.idfrontendgroup,
									fg.groupname
					FROM		cms_frontendgroups fg,
									cms_frontendgroupmembers fgm,
									cms_frontendusers fu
					WHERE		fg.idfrontendgroup = fgm.idfrontendgroup
					AND			fgm.idfrontenduser = fu.idfrontenduser
					AND			fgm.idfrontenduser = '".$this->dealer_user_id."'
					AND			fg.idfrontendgroup = '".$this->dealer_group_selected."'
				";
				$query = $this->query($sql);
				$data = mysql_fetch_array($query, true);

				if($data==FALSE){
					$this->dealer_group_id = '';
				}else{
					$this->get_all_user_groups();
				}

			}//if
		}//else
	}

	/*****
	 * get all user groups
	 * @param
	 * 2010-010-06
	 */
	function get_all_user_groups(){
		$sql = "
			SELECT	fg.idfrontendgroup,
							fg.groupname
			FROM		cms_frontendgroups fg,
							cms_frontendgroupmembers fgm,
							cms_frontendusers fu
			WHERE		fg.idfrontendgroup = fgm.idfrontendgroup
			AND			fgm.idfrontenduser = fu.idfrontenduser
			AND			fgm.idfrontenduser = '".$this->dealer_user_id."'
		";
		$query = $this->query($sql);

		$i=0;
		$group_id = '';
		$group_name = '';
		$sql_group = '';

		if(!empty($query)){
			while($data = mysql_fetch_array($query, true)){
				$dealer_groups[] = $data;
				if($i==0){
					$group_id = $data['idfrontendgroup'];
					$group_name = urldecode($data['groupname']);
					$sql_group = 'dealer_group_id = "'.$data['idfrontendgroup'].'"';
					$i++;
				}else{
					$group_id .= "-".$data['idfrontendgroup'];
					$group_name .= ", ".urldecode($data['groupname']);
					$sql_group .= 'OR dealer_group_id = "'.$data['idfrontendgroup'].'"';
				}
			}
		}
		$this->dealer_groups = $dealer_groups;
		$this->dealer_group_id = $group_id;
		$this->dealer_group_name = $group_name;
		$this->dealer_group_sql = $sql_group;
	}



	/*****
	 * db_select
	 * 2010-05-25
	 * @param $db_name
	 */
	function db_select($db_name){

		if(!mysql_select_db($db_name,$this->connect_id)){
			$message = 'Fehlercode 3';
		}

	}



	/*****
	 * query
	 * 2010-05-25
	 * @param $sql_statement
	 */
	function query($sql){

		if(!$this->result = mysql_query($sql, $this->connect_id)){
			$message = 'Fehlercode 4';
		}

		return $this->result;

	}
}//end class
Möglicherweise sieht jemand wodurch der Sessionabbruch bewirkt wird. Wie man erkennen kann, habe ich die Klasse im Mai diesen Jahres geschrieben und bisher lief diese auch. Die Probleme traten erst mit der 4.8.13 auf und wurden mit der 4.8.14 schlimmer. Ganz ehrlich - ich weiß überhaupt nicht mehr weiter. Ich habe die Klasse auf den wichtigen Teil gekürzt da das Modul ohnehin nicht mehr über den Konstrukor hinaus kommt.

Es wäre schön, wenn irgend jemand was erkennen kann, wodurch das Problem MÖGLICHERWIESE verursacht wird.

Tom Quenten


@edit

Hier noch ein Stück Quelltext aus dem Contenido Modul welches auf die Klasse zugreift. Dies betrifft nun eigentlich alle internen Module, da ich das überall so realisiert habe.

Code: Alles auswählen

<?php	
	$dealer_data['dealer_user_id']		= $auth->auth['uid'];
	$dealer_data['dealer_user_name']	= $auth->auth['uname'];
	$dealer_data['dealer_group_selected']		= (int)$_GET['pg'];
	$dealer_data['dealer_edit_matrix']	= (int)$_GET['mx'];

echo var_dump($dealer_data);

	$home = '/srv/www/htdocs/ks012/';
	//binde classe ein
	require_once($home.'classen/class.communication.php');
	require_once($home.'classen/class.bigsystems_shopconfig.php');
	require_once($home.'classen/class.products.php');
	require_once($home.'classen/class.products_feature.php');

	$communication	= new communication;
	$shopconfig	= new shopconfig($dealer_data);
	$products= new products;
	$products_feature = new products_feature($dealer_data);


	if($shopconfig->dealer_group_count > 1 && empty($dealer_data['dealer_group_selected'])){

		echo $shopconfig->get_dealer_groups_selection($client, $lang, $idcat, $idart);

	}else{
	
	//eigentliches modul zur ausführung
	
	}

?>
Wer fragt, ist ein Narr für fünf Minuten.
Wer nicht fragt, bleibt es für immer.

Handy doof? Tarif doof? Rechnung zu hoch?
Unter www.cottbushandy.de wird dir sicher geholfen!
Planer67
Beiträge: 30
Registriert: Do 29. Jan 2009, 13:07
Wohnort: Konstanz
Kontaktdaten:

Re: Session Time im Frontend extrem kurz

Beitrag von Planer67 »

Tom Quenten hat geschrieben:Ich habe nun noch das Update von 4.8.13 auf 4.8.14 vorgenommen. Nu scheints ganz aus zu sein. Backend läuft, Frontend auch. Logg ich mich ein im Frontend und klicke auf eine geschütze Kategorie, wähle dann aus dem Modul etwas aus (PullDown Menu) hat es sich erledigt. In der Table cms_phplib_active_sessions steht meine Session drin und mit jedem Seitenaufrud wird auch die Spalte changed aktualisiert. Ich habe beim Update das Backend sowie das Frontend geupdatet.

Ich fürchte beinahe das die Session nicht weitergereicht wird. Im Errorlog sind keine Einträge vorhanden. Bin hier voll am verzweifeln. Alle Module liefen vorher (Contenido 4.8.11) perfekt. Was mir noch aufgefallen ist, die Ladezeiten des Frontend sind gefühlte 3-4 Sekunden pro Seite, das ging vorher schneller, da bin ich mir sicher.

Tom Quenten
Hallo Tom,

ich würde mal die geschützten Kategorien aufheben (normal) und die Gruppenberechtigungen der Frontend-User alle löschen (falls nicht schon geschehen). Danach die Kategorien wieder schützen und die Gruppenberechtigungen der Frontend-User komplett neu setzen...
Mit Grüßen vom Bodensee...
_______________________________________
Tom Quenten
Beiträge: 125
Registriert: Do 10. Jun 2004, 13:55
Wohnort: Gallinchen
Kontaktdaten:

Re: Session Time im Frontend extrem kurz

Beitrag von Tom Quenten »

Hallo,

alsooooooooo........... *kopfqualmt*
Es hat alles nichts gebracht - und ich habe noch immer keinen Plan voran das liegen soll. Ich vermute mal so ins blaue hinein, das es was mit den Versionen zu tun haben muss. Die Datenbank ist von der Version 4.4.4., ich glaube damit hatte ich mal angefangen so 2003 / 2004 glaube ich.

Ich habe die Version 4.8.14 komplett neu aufgesetzt, und das Ding geht ab wie Schmidts Katze. Habe auch schon die ersten internen Module, also meinen eigenen, importiert und es läuft.....(noch) :) Ich will mal nicht zu laut schreien. Das es läuft zeigt jedoch, das mein Code sauber geschrieben ist, wer weiß wo nun genau das Problem ist.

In diesem Zuge werde ich auch gleich die Seiten aufteilen, das macht Sinn aufgrund des Problems welches ich beobachten konnte. Beitrag hier Punkt 2.1. In meinem bisherigen System waren insgesamt 11 Mandanten, und nach meiner Beobachtung fürchte ich nun das wenn ein Mandant schlechten Code speichert, andere Mandanten dann eben auch in Mitleidenschaft gezogen werden. Um dies zu umgehen, bekommt jede Website ein eigenes System. Weitere Mandanten gehören dann zu dieser Website, sprich Subdomains zum Beispiel.

Ich denke das ist nach bisherigem Wissensstand wohl die beste Lösung.

Ich danke allen die mich bei diesem Problem unterstützt haben. Sollte ich die Ursache tatsächlich noch mal finden, poste ich das natürlich noch nach.

Beste Grüsse

Tom Quenten
Wer fragt, ist ein Narr für fünf Minuten.
Wer nicht fragt, bleibt es für immer.

Handy doof? Tarif doof? Rechnung zu hoch?
Unter www.cottbushandy.de wird dir sicher geholfen!
Tom Quenten
Beiträge: 125
Registriert: Do 10. Jun 2004, 13:55
Wohnort: Gallinchen
Kontaktdaten:

Re: Session Time im Frontend extrem kurz

Beitrag von Tom Quenten »

Hallo,

nachdem ich nun ein komplett neues System aufgesetzt habe, die mühevolle Arbeit unternahm und die Artikel nach und nach übertragen habe (System 4.6. ---> System 4.8.) bin ich jetzt hoffentlich ein großes Stück weiter in dem Wissensstand. Zuerst einmal, ich habe jetzt die gleichen Problem wie vorher (wie sollte es auch anders sein :)) aber ich habe mir mal das mit den Sessions genauer angesehen und gerade eben sowas wie einen Geisteblitz erlebt. :) Ja sowas soll es noch geben.

Zur Erklärung
----------------
Meine eigenen Module nutzen eine eigene MySQL Connection Classe. Alle Module bauen genau darauf auf und ich denke da liegt der Hase begraben.

Warum?

Wenn ich eine Seite aufrufe die im Quelltext ein Modul nutzt was auf die DB Klasse von Contenido zugreift ist alles chic. In der Tabelle cms_phplib_active_sessions wird die Spalte changed schön brav aktualisiert. Was mir noch aufgefallen ist, in der Spalte name steht sid_2_2. Soooooo, nun greife ich auf eine Seite zu die eines meiner eigenen Module integriert hat. Was passiert hier in der Tabelle cms_phplib_active_sessions? In der Spalte changed tut sich nichts. Es wir eine neue Zeile eingefügt....in der Spalte name steht jetzt aber sid_1_1.

Jetzt im Nachhinein ist es logisch und das Puzzle fügt sich langsam zusammen. In dem Object
welches mit

Code: Alles auswählen

$db = new DB_Contenido; 
instanziert wird, ist das Sessionmanagement ja integriert. In meinen eigenen Modulen nicht.

Jetzt die Fachfrage an die Entwickler......
Ist es möglich mit einer EVENTUELL vorhandenen Classe dieses Problem zu umgehen OHNE das ich jetzt meine eigenen Module alle umschreiben müsste? Ich stelle mir das so vor....ich übergebe ein Object welches Contenido evtl. schon an Board hat in meine eigene Classen und rufe dort sowas wie session->aktualisieren auf.....Es wäre phänomenal wenn das funktionieren würde, ich verspüre keine Ambitionen alles umschreiben zu müssen.

Auf die Frage warum ich nicht die Contenido $db Objecte nutze.......ich hatte vor Ewigkeiten mal die Frage in den Raum gestellt ob es möglich ist, simultan auf mehrere Datenbanken zugreifen zu können. Dies wurde mir damals verneint, weshalb ich angefangen habe eigene Classen zu entwickeln und zu nutzen.

Es wäre schön, wenn es hier eine Lösung gibt. Vielen Dank!

Tom Quenten
Wer fragt, ist ein Narr für fünf Minuten.
Wer nicht fragt, bleibt es für immer.

Handy doof? Tarif doof? Rechnung zu hoch?
Unter www.cottbushandy.de wird dir sicher geholfen!
Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Re: Session Time im Frontend extrem kurz

Beitrag von Dodger77 »

Die Abweichung sid_2_2 zu sid_1_1 deutet darauf hin, dass deine Module wohl auch "keine Ahnung" haben, welcher Mandant und welche Sprache gerade aktuell sind. Mit würde als Lösung jetzt nur direkt einfallen, die entsprechenden Module/Klassen auf die Verwendung von DB_Contenido umzustellen. Diese kann man ja einfach im Konstruktor der Klasse "shopconfig" übergeben.
Tom Quenten
Beiträge: 125
Registriert: Do 10. Jun 2004, 13:55
Wohnort: Gallinchen
Kontaktdaten:

Re: Session Time im Frontend extrem kurz

Beitrag von Tom Quenten »

Huch, da gabs ja noch eine Antwort. :)

Alsooo, ich habe hier mal die ganze Classe. Diese sollte eigentlich ausreichend dokumentiert sein. Die Objecte DB und SESS werden in die Classe mit übergeben, nachdem ich anfangs eine eigene MySQL Verbindung erstellen ließ. Somit sollte ja dies Session und damit die Mandanten ID und die Sprache auch vorhanden sein. Es wäre schön wenn sich das einer noch einmal anschauen könnte. Die Classe dürfte doch für alle Interessant sein die im Frontend Anwendungen zum laufen bringen möchten.

Mein Hintergrund und Ansporn dieser Classe war es das,

- Nutzer im Frontend arbeiten können
- Zugriff nur auf die Gruppen (in meinem Fall Shops) haben denen Sie auch angehören

Ist ein Nutzer nur einer Gruppe zugeordnet, kann er sich durchclicken durch die Anwendungen, gehört er mehreren Gruppen an, bekommt er eine Auswahl zurück in der er die zu bearbeitende Gruppe anclicken muss.
Mehr kann man aus dem Code herauslesen.

Code: Alles auswählen

<?php
/*****
 * @class		groupmanagement for contenido
 * @param		mysql_data
 * @info		
 * @result	
 * @created	2010-11-17
 * @from		andre domaschke
 */

class groupmanagement {

	var $db;										//database instanz

	var $dealer_user_id;				//user_id
	var $dealer_group_selected;	//enthält genau eine selectierte groupid bei mehrfachauswahl
	var $dealer_edit_matrix;		//die zu bearbeitende matrix
	var $dealer_group_count;		//anzahl der groups die dem user zur auswahl stehen

	var $client;								//contenido werte zur linkgenerierung notwendig
	var $lang;									//contenido werte zur linkgenerierung notwendig
	var $idcat;									//contenido werte zur linkgenerierung notwendig
	var $idart;									//contenido werte zur linkgenerierung notwendig

	var $contenido_db;					//contenido db object
	var $contenido_sess;				//contenido sess object



	/*****
	 * @methode	constructor
	 * @param		mysql_data
	 * @info		connect to mysql db over class.new.db.mysql
	 * @result	
	 * @created	2010-05-25
	 * @from		andre domaschke
	 */
	function groupmanagement($contenido_db=FALSE,$contenido_sess=FALSE,$dealer_data){

		if($contenido_db != FALSE){
			$this->contenido_db = $contenido_db;
		}else{
			echo "Contenido Datenbank Object MUSS übergeben werden!";
			exit;
		}
		if($contenido_sess != FALSE){
			$this->contenido_sess = $contenido_sess;
		}else{
			echo "Contenido Session Object MUSS übergeben werden!";
			exit;
		}

		//groupmanagement variablen
		if(array_key_exists('dealer_group_selected', $dealer_data))
			$this->dealer_group_selected = $dealer_data['dealer_group_selected'];
		if(array_key_exists('dealer_user_id', $dealer_data)){
			$this->dealer_user_id = $dealer_data['dealer_user_id'];
		}else{
			//$this->db->error_collect('groupmanagement->100');
		}
		if(array_key_exists('dealer_edit_matrix', $dealer_data))
			$this->dealer_edit_matrix	= $dealer_data['dealer_edit_matrix'];

		//contenido variablen
		if(array_key_exists('client', $dealer_data))
			if($dealer_data['client'] != FALSE)
				$this->client = $dealer_data['client'];
		if(array_key_exists('lang', $dealer_data))
			if($dealer_data['lang'] != FALSE)
				$this->lang = $dealer_data['lang'];
		if(array_key_exists('idcat', $dealer_data))
			if($dealer_data['idcat'] != FALSE)
				$this->idcat = $dealer_data['idcat'];
		if(array_key_exists('idart', $dealer_data))
			if($dealer_data['idart'] != FALSE)
				$this->idart = $dealer_data['idart'];

		//get group count
		$group_count = $this->get_user_group_count();

		if($group_count['count'] == 1){

			$this->dealer_group_name = $group_count['groupname'];
			$this->dealer_group_selected = $group_count['idfrontendgroup'];

		}else{

			/***
			 * user hat mehere groups zur auswahl
			 */
			if(empty($this->dealer_group_selected)){

				//zeige dem frontenduser seine gruppen, damit er auswählen kann
				$this->get_dealer_groups_selection();

			}else{

				//es wurde eine group id selectiert und übergeben
				//überprüfe nochmals ob diese tatsächlich zum user gehört
				$this->check_user_group_mix();

			}

		}

	}



	/*****
	 * @methode	check_user_group_mix
	 * @param		
	 * @info		check authentizität user group mix
	 * @result	
	 * @created	2010-12-19
	 * @from		andre domaschke
	 */
	function check_user_group_mix(){

		$sql = "
			SELECT	fg.idfrontendgroup,
							fg.groupname
			FROM		cms_frontendgroups fg,
							cms_frontendgroupmembers fgm,
							cms_frontendusers fu
			WHERE		fg.idfrontendgroup = fgm.idfrontendgroup
			AND			fgm.idfrontenduser = fu.idfrontenduser
			AND			fgm.idfrontenduser = '".$this->dealer_user_id."'
			AND			fg.idfrontendgroup = '".$this->dealer_group_selected."'
		";
		$this->contenido_db->query($sql);
		$this->contenido_db->next_record();
		if($this->contenido_db->f('idfrontendgroup')==FALSE){
			$this->user_group_selected='';
			$this->get_dealer_groups_selection();
		}

	}



	/*****
	 * @methode	get_user_group_count
	 * @param		
	 * @info		get user group count
	 * @result	
	 * @created	2010-10-06
	 * @from		andre domaschke
	 */
	function get_user_group_count(){

		$sql = "
			SELECT	count(*) AS count,
							fg.idfrontendgroup,
							fg.groupname
			FROM		cms_frontendgroups fg,
							cms_frontendgroupmembers fgm,
							cms_frontendusers fu
			WHERE		fg.idfrontendgroup = fgm.idfrontendgroup
			AND			fgm.idfrontenduser = fu.idfrontenduser
			AND			fgm.idfrontenduser = '".$this->dealer_user_id."'
		";
		$this->contenido_db->query($sql);
		$this->contenido_db->next_record();
		$group_count['count'] = $this->contenido_db->f('count');
		$group_count['idfrontendgroup'] = $this->contenido_db->f('idfrontendgroup');
		$group_count['groupname'] = $this->contenido_db->f('groupname');
		return $group_count;

	}



	/*****
	 * @methode	get_dealer_all_groups
	 * @param		
	 * @info		get all groups of this user
	 * @result	
	 * @created	2010-10-06
	 * @from		andre domaschke
	 */
	function get_dealer_all_groups(){

		$sql = "
			SELECT	fg.idfrontendgroup,
							fg.groupname
			FROM		cms_frontendgroups fg,
							cms_frontendgroupmembers fgm,
							cms_frontendusers fu
			WHERE		fg.idfrontendgroup = fgm.idfrontendgroup
			AND			fgm.idfrontenduser = fu.idfrontenduser
			AND			fgm.idfrontenduser = '".$this->dealer_user_id."'
		";
		$this->contenido_db->query($sql);
		while($this->contenido_db->next_record()){
			$dealer_groups[]=array(
				'idfrontendgroup' => $this->contenido_db->f('idfrontendgroup'),
				'groupname' => $this->contenido_db->f('groupname'),
			);
		}
		if(is_array($dealer_groups))
			return $dealer_groups;

	}



	/*****
	 * @methode	get_dealer_groups_selection
	 * @param		
	 * @info		get screen output for group selection
	 * @result	
	 * @created	2010-10-08
	 * @from		andre domaschke
	 */
	function get_dealer_groups_selection(){

		$dealer_groups = $this->get_dealer_all_groups();
		$output  = '<div id="group_selection">';
			$output .= '<div class="top">Gruppe wählen</div>';
			$output .= '<div class="body">';
			while(list($key,$value) = each($dealer_groups)){
				$output .= '<div><a href="'.$this->contenido_sess->url('front_content.php?client='.$this->client.'&lang='.$this->lang.'&idcat='.$this->idcat.'&idart='.$this->idart.'&dgs='.$value['idfrontendgroup'].'').'" class="fs12 fwb">'.urldecode($value['groupname']).'</a></div>';
			}
			$output .= '</div>';
			$output .= '<div class="bottom"></div>';
		$output .= '</div>';

		echo $output;

	}



	/*****
	 * @methode	get_username
	 * @param		
	 * @info		username
	 * @result	
	 * @created	2010-06-18
	 * @from		andre domaschke
	 */
	function get_username($id){

		$sql = "
			SELECT	username
			FROM		cms_frontendusers fu
			WHERE		fu.idfrontenduser = '".$id."'
		";
		$this->contenido_db->query($sql);
		$this->contenido_db->next_record();
		return $this->contenido_db->f('username');

	}



	/*****
	 * @methode	get_groupname
	 * @param		
	 * @info		groupname
	 * @result	
	 * @created	2010-06-18
	 * @from		andre domaschke
	 */
	function get_groupname($id){

		$sql = "
			SELECT	groupname
			FROM		cms_frontendgroups fg
			WHERE		fg.idfrontendgroup = '".$id."'
		";
		$this->contenido_db->query($sql);
		$this->contenido_db->next_record();
		return $this->contenido_db->f('groupname');

	}




}
?>
Ich will unbedingt wissen was hier schief läuft und warum die Session so schnell "gekillt" wird. Eventuell hilft die Information.....eigentlich gekillt wird die Session in der Tabelle cms_phplib_active_sessions ja nicht, sie bleibt bestehen. Melde ich mich also wieder an, sollte hier eigentlich eine weitere Zeile erstellt worden sein. Dem ist aber nicht so, es scheint als würde meine Session reaktiviert.....


Tom Quenten
Wer fragt, ist ein Narr für fünf Minuten.
Wer nicht fragt, bleibt es für immer.

Handy doof? Tarif doof? Rechnung zu hoch?
Unter www.cottbushandy.de wird dir sicher geholfen!
Tom Quenten
Beiträge: 125
Registriert: Do 10. Jun 2004, 13:55
Wohnort: Gallinchen
Kontaktdaten:

Re: Session Time im Frontend extrem kurz

Beitrag von Tom Quenten »

Ich habe die Ursache soeben durch Zufall gefunden!

Es liegt an den Multi - SQL Verbindungen die ich aufbauen möchte. Sobald ich eine neue Verbindung zu einer anderen MySQL DB aufbauen möchte ist die Session gekillt. Ich kann nachvoollziehen warum das so ist.
Für den Fall, dass ein zweiter Aufruf von mysql_connect() mit den gleichen Argumenten erfolgt, wird keine neue Verbindung aufgebaut, sondern die Verbindungs-Kennung der schon bestehenden Verbindung zurückgeliefert.
Da ich in diesem Moment auch die Datenbank geändert habe auf die ich bei meiner Anwendung zurückgreifen möchte und in genau dieser DB keine contenido tabellen vorzufinden sind wird die Session gekillt.

Der Parameter new_link beeinflusst dieses Verhalten und mysql_connect() öffnet immer eine neue Verbindung, sogar dann, wenn mysql_connect() zu einem früheren Zeitpunkt mit den gleichen Parametern aufgerufen wurde.

Bei SQL safe mode wird dieser Parametern ignoriert.

Da ich mit anderen Scripten durchaus mehrere Verbindungen synchron öffne und damit auch vernünftig arbeiten kann ist bei mir der SQL Safe Mode deaktiviert. Nun verrat mir doch mal einer wo Contenido die SQL Verbindung aufbaut. In welcher Datei finde ich das???


Danke!
Wer fragt, ist ein Narr für fünf Minuten.
Wer nicht fragt, bleibt es für immer.

Handy doof? Tarif doof? Rechnung zu hoch?
Unter www.cottbushandy.de wird dir sicher geholfen!
Gesperrt