Das deutsche Python-Forum

Diskussionen rund um die Programmiersprache Python
Aktuelle Zeit: Fr Sep 03, 2010 02:03

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: CGI Sessionverwaltung mit SQL...
BeitragVerfasst: Di Mai 31, 2005 07:37 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
EDIT: Aktuelle Info's zum CGI-Sessionhandling hier: http://jensdiemer.de/Programmieren/Pyth ... onhandling

Ich habe mein PyLucid-CMS weiterentwickelt. Mittlerweile kann ich die Seiten komplett mit Python-CGI erzeugen lassen (noch nicht online released).

Nun interessiere ich mich für ein Session-Handling. Dabei hatte ich gerade die Idee es mittels SQL zu erledigen.

Ich stelle mir das ungefähr so vor:

    - Man hinterläßt beim User eine eindeutige ID per Cookie, z.B. mittels md5(time.time()+IP).

    - Diese ID wird zusammen mit einem Zeistempel und Temporäre Userdaten (z.B. Formulardaten o.ä.) in die SQL-DB geschrieben.

    - Vor jedem schreiben, werden alte Einträge (abgelaufene Session) gelöscht.


Was ich noch nicht genau weiß, wie ein Zeitstempel in SQL gehandhabt wird. Aber das finde ich noch raus, damit ich weiß wie eine DELETE ... WHERE... Klausel aussehen muß.

Natürlich bietet lucid in PHP schon eine Art Session-Handling... Ich hab da auch gleich noch eine Frage dazu hier gestellt!!! Wäre nicht schlecht, wenn es quasi kompatibel zueinander ist ;)

Was haltet ihr von der Idee?

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Zuletzt geändert von jens am Mi Nov 02, 2005 10:04, insgesamt 2-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 01, 2005 12:28 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Bin nun dabei die Sache zu realisieren... Nun frage ich mich gerade, ob ich evtl. zur bestimmung der Zeit (ob Session abgelaufen ist) die Datums- und Zeit-Funktionen vom SQL-Server direkt nutzen sollte, oder vielleicht doch einfach time.time() von Python???

Ich möchte allerdings direkt per SQL die abgelaufenen Sessions löschen lassen? Also erscheint mir die erste Variante besser, hab aber nicht viel Ahnung wie ich es machen kann...

Wer kann mit helfen?

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 01, 2005 13:03 
User

Registriert: Mo Mai 30, 2005 12:32
Beiträge: 28
Speicher das am besten als Unix timestamp also mit time.time(). Löschen kannst Du dann immer noch mit

DELETE FROM sessions WHERE time < ' + time.time()

Das geht meistens einfacher als sich mit den verschiedenen Datums- und Zeitfunktion der verschiedenen Datenbanken rumzuärgern.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 01, 2005 14:35 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Danke für deine Antwort... Ich werde es dann so machen, wie du es Vorschlägst :)

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 01, 2005 14:39 
User

Registriert: Mo Mai 30, 2005 12:32
Beiträge: 28
Ach ich sehe gerade ich bin auf einen kleinen Unterschied zwischen PHP und Python reingefallen. (Ich steige gerade erst in Python ein).

In PHP liefert time() keine Nachkommastellen, d.h. obige Methode funktioniert mit PHP in Python hat time.time() aber Nachkommastellen und obige Methode würde nicht richtig funktionieren. D.h. man muss die Nachkommastellen bei time.time() noch weglassen damit es klappt.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 01, 2005 15:31 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Warum? Kann SQL nur int()-Werte vergleichen?

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 01, 2005 15:34 
User

Registriert: Mo Mai 30, 2005 12:32
Beiträge: 28
Nö, gehen auch Textwerte, aber ich weiß nicht was der Punkt in Verbindung mit dem kleiner als macht. Evtl. gibts da Probleme.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 01, 2005 22:37 
Moderator

Registriert: Mi Jan 26, 2005 00:29
Beiträge: 11277
nbkr hat geschrieben:
Nö, gehen auch Textwerte, aber ich weiß nicht was der Punkt in Verbindung mit dem kleiner als macht. Evtl. gibts da Probleme.


Der Punkt macht das gleiche wie in vielen Programmiersprachen: einen Dezimalpunkt darstellen. SQL kennt nicht nur ganze Zahlen:

Code:
sqlite> select 4.2;
4.2
sqlite> select 4.2 < 2.3;
0
sqlite> select 4.2 > 2.3;
1


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 01, 2005 23:45 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Ich hab was gefunden:
Zitat:
$sql_tidy = 'DELETE FROM '.$db_prefix.'_news WHERE datum < date_add(current_date, interval -3 day)';


Außerdem gibt ja den SQL-Typ timestamp... Wenn ich in phpMyAdmin dann ein Wert einfüge, kann ich bei "Funktion" z.B. NOW auswählen... Also gibt es schon Mittel und Wege das ganz komplett in SQL zu machen... Aber ob das besser ist?

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 01, 2005 23:51 
User

Registriert: Mi Nov 05, 2003 19:06
Beiträge: 772
Wohnort: Schweiz
Hi

Ja würde dir dringend empfehlen mit dem sql timestamp zu arbeiten. musst dich dann halt mit ein paar funktionen auseinandersetzen aber es ist einfach mit denen zu arbeiten und falls mal eine andere sprache darauf zugreifen muss geht es genau gleich.

Gruss


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 02, 2005 23:21 
Moderator

Registriert: Mi Jan 26, 2005 00:29
Beiträge: 11277
Bei Datenbankfunktionen muss man aber immer daran denken, das die von DB zu DB verschieden sein können. Man legt sich also auf eine DB fest oder muss das SQL umschreiben wenn man eine andere benutzen möchte.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 06, 2005 23:50 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Habe die Sourcen in Codesnippets http://www.python-forum.de/viewtopic.php?t=3383 verschoben ;)

Das Problem mit den löschen von Cookies besteht allerdings immer noch: http://www.python-forum.de/viewtopic.php?t=3384

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Zuletzt geändert von jens am Di Jun 07, 2005 15:11, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: So Jul 24, 2005 12:23 
User

Registriert: Sa Aug 21, 2004 14:58
Beiträge: 151
Wohnort: Schweiz, BE-2500
ICh habe eine kleine Frage zu deinem Sessionhandler. Man muss ja bei der Instantierung eine "File-like"-Object als Argument übergeben. Jetzt ergibt sich aber daraus das Probem, dass wenn der Webserver das Script als User "nobody" ausführt, das Script keine Schreibrechte hat (was bei der Anweisung ein File zu öffnen um das Log reinzuschreiben unweigerlich zu einem Fehler führt). Wie hast du das Problem gelöst?


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: So Jul 24, 2005 12:57 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Ich benutzte keine Datei... Wenn du's aber machen willst, mußt du ein Verz. per FTP erstellen und allen schreibrechten geben. Dann kann auch nobody rein schreiben...

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: So Jul 24, 2005 13:18 
User

Registriert: Sa Aug 21, 2004 14:58
Beiträge: 151
Wohnort: Schweiz, BE-2500
Mein Admin erlaubt (zu Recht) keine solchen Spässe wie offene FTP-Verzeichnisse. Was benutzt du denn als Alternative.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de