Seite 1 von 2
4.5.2: Login-Funktionalität
Verfasst: So 7. Nov 2004, 15:34
von m.wohlers
Hallo Contenido-Team und -Freunde!
Mit den aktuellsten Schnappschüssen aus der 4.5.2'er Alpha-Reihe habe ich folgendes Problem: der Login für Frontend-Nutzer funktioniert nicht mehr richtig. Direkt nach dem Login erscheint die erste "gesperrte" Kategorie und $auth->user ist richtig gesetzt. Doch das war's dann - der nächste Seitenaufruf zeigt, daß man wieder ausgeloggt ist.
Im Error-Log erscheint folgendes:
Code: Alles auswählen
[07-Nov-2004 15:28:41] /cms/front_content.php?idcat=65&client=1%C3%83%C2%A2%C3%85%E2%80%99%C3%82%C2%A9=1%C3%A2%C5%92%C2%A9=1%E2%8C%A9=1&sid_1_1=fbda3c56fb04be1c340ac9650495b61f MySQL Error (): update con_phplib_active_sessions set val='c2lkXzFfMTokdGhpcy0 ........ J2xhbmcnXSA9ICcxJzsg', changed='20041107152841' where sid='e9b5a08851c4d38aaea1d5ec4ecb75c0' and name='sid_1_1'
[07-Nov-2004 15:23:57] /cms/front_content.php?idart=136&idcat=105&oldidcat=36&oldidart=197 MySQL Error (): update con_phplib_active_sessions set val='c2lkXzFfMTokdGhpcy0+aW4gPSAnMCc7ICR0aGlzLT5wdCA9IGFycmF5KCk7ICR0aGlzLT5wdFsnYXV0aCddID0gJzEnOyAkdGhpcy0....... ydjbGllbnQnXSA9ICcxJzsg', changed='20041107152357' where sid='1d91c98052d5576f2127696db9f07b15' and name='sid_1_1'
[07-Nov-2004 15:21:42] /cms/front_content.php?idcat=8&client=1%E2%8C%A9=1&sid_1_1=eb24b51dce7fc35b4e24e8631f1c3b38 MySQL Error (): update con_phplib_active_sessions set val='c2lkXzFfMTokdGhpcy0+aW4gPSAnMCc7ICR0aGlzLT5wdCA9IGFycmF5KCk7ICR0aGlzLT5wdFsnYXV0aCddID0gJzEnOyAkdGhpcy0+cHRbJ2NmZ0NsaWVudCddID0gJzEnOyAkdGhpcy0........ NbJ2xhbmcnXSA9ICcxJzsg', changed='20041107152142' where sid='8fb89f4cb7b529ebb907d69a8dd84f42' and name='sid_1_1'
0gPSAndXBsb2FkLyc7ICRHTE9CQUxT ...................... bmcnXSA9ICcxJzsg', changed='20041107151045' where sid='15beca86d3925a2a2f56d7063582f37c' and name='sid_1_1'
Ist da schon etwas diesbezügliches bekannt und/oder wird es gefixt?
Danke für die Bemühungen...
Verfasst: Mo 8. Nov 2004, 10:08
von emergence
bekannt nein...
kann man sich das irgendwo ansehen ?
welches modul hast du verwendet ?
Verfasst: Mo 8. Nov 2004, 11:16
von m.wohlers
Hallo emergence!
Danke für das Interesse... also der direkte Link zur entsprechenden Homepage ist
http://haendler.dantotec.de
Für Dich habe ich einen Benutzer angelegt, lautend auf Deinen Benutzernamen hier im Forum und das Passwort ist "contenido".
Momentan läuft ein Login-Modul aus dem Forum, vorher wurde das über eine eigene Lösung gemäß der Doku vom Timo gemacht. Ergebnis war das gleiche, die Übergabe an die front_content.php ist ja nicht falsch zu machen

Verfasst: Mo 8. Nov 2004, 11:38
von emergence
ähm nein, so kann ich momentan nichts sagen...
muss das mit ner 4.5.2alpha version testen...
mal sehen ob die sql fehlermeldungen auch bei mir auftreten...
Verfasst: Mo 8. Nov 2004, 11:42
von m.wohlers
Hallo emergence!
Danke für's Testen... Du hast gesehen, was passiert: direkt nach dem Login ist alles okay, aber beim nächsten Klick ist alles Weg und o.g. SQL-Fehler stehen im Log...
Ich habe noch nicht getestet, ab welchem Snapshot der Fehler auftritt... das muss ich noch nachholen.
Verfasst: Mo 8. Nov 2004, 11:48
von emergence
also bei der 4.5.2alpha
geht das wunderbar...
mir fehlt da irgendwie die meldung die der mysql server zurückliefert...
führ mal folgendes query via phpmyadmin aus
Code: Alles auswählen
update con_phplib_active_sessions set val='123', changed='20041108114331' where sid='376d20666fbf2fea0831520559f945aa' and name='sid_1_1'
und teil mir die fehlermeldung mit...
Verfasst: Mo 8. Nov 2004, 11:54
von m.wohlers
Hallo emergence!
Es gibt keine Fehlermeldung...
Was hat das zu bedeuten? Any ideas?
Verfasst: Mo 8. Nov 2004, 12:09
von emergence
wenn keine kommt hab ich ein problem, da ich den fehler nicht eingrenzen kann...
sobald man sich einloggt werden die login daten in die tabelle
con_phplib_active_sessions geschrieben...
contenido überprüft dann einfach nur ob in dieser tabelle der eintrag die login berechtigung hat...
nur funktioniert das bei dir nicht... die einträge kommen gar nie bei dir in diese tabelle da mysql einen fehler liefert...
die frage ist nur welcher...
ich hab mal ein posting hier im forum hineingestellt welches den mysql fehler mit protokolliert und im errorlog.txt mit anzeigt...
->
http://www.contenido.de/forum/viewtopic ... 0133#20133
vielleicht ist es dann möglich zu sagen warum das bei dir nicht geht...
Verfasst: Mo 8. Nov 2004, 12:46
von m.wohlers
Hallo emergence!
Danke, das war's... dieses Code-Stückchen:
Code: Alles auswählen
$this->haltmsg("MySQL-Error: ".$this->Error." (".$this->Errno.")");
ist wirklich zu empfehlen. Warum ist das immer noch nicht im CVS eingebaut? -> Dringende Empfehlung an die Maintainer!
Das Error-Log liefert nun folgendes:
Code: Alles auswählen
[08-Nov-2004 12:28:42] MySQL-Error: Table 'usr_web39_1.con_phplib_active_sessions' doesn't exist (1146)
Das Geheimnis lag in einem neuen Modul (siehe Thread:
http://contenido.de/forum/viewtopic.php?t=3624), welches eine neue Datenverbindung zu einer anderen Datenbank aufbaut.
Es findet sich folgender Aufbau im von mir leicht modifizierten Modul (analog zum Original aus dem Thread):
Code: Alles auswählen
$osc_connection = mysql_connect (OSC_DB_SERVER, OSC_DB_SERVER_USERNAME, OSC_DB_SERVER_PASSWORD);
if (!mysql_select_db (OSC_DB_DATABASE, $osc_connection))
{
die ("Keine Verbindung zur Datenbank");
}
...
$sql_result = mysql_query($sql, $osc_connection) or die("Fehler");
...
// Datenbankverbindung schliessen
mysql_free_result($sql_result);
mysql_close($osc_connection);
Nach dem Ändern der Datenbankverbindung und dem Schließen bleibt dennoch die "neue" Datenbank aktiv und die folgenden Contenido-DB-Zugriffe laufen in's Leere...
Ist das ein Bug? Sollte vielleicht nach jedem Modul wieder die "Standard-Verbindung" hergestellt werden?
Oder ist das Modul nicht regelkonform? Wie kann ich dann "standardisiert" am Schluß des Moduls wieder die "richtige" Verbindung aufbauen? Oder gibt es eine andere Möglichkeit?
Vielen herzlichen Dank auf jeden Fall für die
sehr schnelle und
kompetente Hilfe...
Verfasst: Mo 8. Nov 2004, 13:04
von emergence
m.wohlers hat geschrieben:Nach dem Ändern der Datenbankverbindung und dem Schließen bleibt dennoch die "neue" Datenbank aktiv und die folgenden Contenido-DB-Zugriffe laufen in's Leere...
das erklärt natülich einiges...
m.wohlers hat geschrieben:Ist das ein Bug? Sollte vielleicht nach jedem Modul wieder die "Standard-Verbindung" hergestellt werden?
ist ne gute frage...
mir wäre es am liebsten wenn es etwas wie
$dbext->new Db_External($dbname,$user,$pass);
geben würde...
und ne funktion wie
$dbext->close();
Oder ist das Modul nicht regelkonform? Wie kann ich dann "standardisiert" am Schluß des Moduls wieder die "richtige" Verbindung aufbauen? Oder gibt es eine andere Möglichkeit?
ähm bei
$db = new Db_Contenido; am beginn eines moduls
wäre es möglich das dann wieder die richtige db selektiert wird... weiss ich jetzt aber nicht...
Vielen herzlichen Dank auf jeden Fall für die sehr schnelle und kompetente Hilfe...
gerne und danke für die blumen...
Verfasst: Mo 8. Nov 2004, 18:13
von m.wohlers
Hallo emergence!
Nichts zu danken, Ehre wem Ehre gebührt... mit Kritik spare ich schließlich auch nicht
Problematischer sieht es da schon mit der "Lösung" des Problems aus, ich habe es nicht geschafft, die Datenbankverbindung wieder "zurückzubiegen". Egal ob per
oder manuell mit - trotzdem tritt derselbe Fehler auf...
Code: Alles auswählen
$dummy_connection = mysql_connect($contenido_host, $contenido_user, $contenido_password);
Hat jemand oder ganz im Speziellen der timo eine Idee?
PS: Sollten wir das nicht als Feature Request formulieren?
Verfasst: Mo 8. Nov 2004, 18:16
von timo
wenn du nur eine andere Datenbank ansprechen willst und keinen anderen Host, dann ist es bei MySQL recht einfach:
z.b.
SELECT * FROM <datenbank>.<tabelle>;
Verfasst: Mo 8. Nov 2004, 18:45
von emergence
@timo
schon klar
soweit ich das noch im kopf habe ergibt sich das problem daraus, das wenn einmal eine db selektiert wurde bleibt diese verbindung bestehen...
ich meinte mit DB_External nichts anderes als die möglichkeit zwei komplett unterschiedliche db's ansprechen zu können...
bei der externen db sollte es durchaus möglich sein, einen eigenen host, user und pass definieren zu können...
die frage die sich mir jetzt stellt ob das so überhaupt möglich ist...
wenn man nun die db so anwählt wie du das meinst, wo zeigt das nachfolgende query hin(wenn keine db mitangegeben ist...) auf die zuletzt angegebene oder die ursprüngliche...
ich denke eher es ist die zuletzt angegebene...
ad. zurückbiegen
ich denke das müsste man dann mit mysql_select _db machen...
Verfasst: Di 9. Nov 2004, 08:35
von m.wohlers
Hallo Timo!
timo hat geschrieben:wenn du nur eine andere Datenbank ansprechen willst und keinen anderen Host, dann ist es bei MySQL recht einfach:
z.b.
SELECT * FROM <datenbank>.<tabelle>;
Danke, ja... aber zum Einen spreche ich einen anderen Host an und zum anderen muß es ja auch eine "saubere" Lösung geben oder nicht?
Wie kann ich also am Ende eines Moduls wieder die "normale" Datenbankverbindung für Contenido wiederherstellen? Ich habe intensiv im Code gesucht aber nichts passendes gefunden...
Verfasst: Mi 10. Nov 2004, 18:30
von m.wohlers
Hallo timo und alle anderen!
Nochmal meine Frage, verzeiht die Ungeduld:
Wie kann ich also am Ende eines Moduls wieder die "normale" Datenbankverbindung für Contenido wiederherstellen?
Danke für Eure Bemühungen...