CGI Sessionverwaltung mit SQL...

Du hast eine Idee für ein Projekt?
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

CGI Sessionverwaltung mit SQL...

Beitragvon jens » Dienstag 31. Mai 2005, 06:37

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?
Zuletzt geändert von jens am Mittwoch 2. November 2005, 09:04, insgesamt 2-mal geändert.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 1. Juni 2005, 11:28

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?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
nbkr
User
Beiträge: 28
Registriert: Montag 30. Mai 2005, 11:32

Beitragvon nbkr » Mittwoch 1. Juni 2005, 12:03

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.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 1. Juni 2005, 13:35

Danke für deine Antwort... Ich werde es dann so machen, wie du es Vorschlägst :)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
nbkr
User
Beiträge: 28
Registriert: Montag 30. Mai 2005, 11:32

Beitragvon nbkr » Mittwoch 1. Juni 2005, 13:39

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.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 1. Juni 2005, 14:31

Warum? Kann SQL nur int()-Werte vergleichen?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
nbkr
User
Beiträge: 28
Registriert: Montag 30. Mai 2005, 11:32

Beitragvon nbkr » Mittwoch 1. Juni 2005, 14:34

Nö, gehen auch Textwerte, aber ich weiß nicht was der Punkt in Verbindung mit dem kleiner als macht. Evtl. gibts da Probleme.
BlackJack

Beitragvon BlackJack » Mittwoch 1. Juni 2005, 21:37

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: Alles auswählen

sqlite> select 4.2;
4.2
sqlite> select 4.2 < 2.3;
0
sqlite> select 4.2 > 2.3;
1
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 1. Juni 2005, 22:45

Ich hab was gefunden:
$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?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Mittwoch 1. Juni 2005, 22:51

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
BlackJack

Beitragvon BlackJack » Donnerstag 2. Juni 2005, 22:21

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.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 6. Juni 2005, 22:50

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
Zuletzt geändert von jens am Dienstag 7. Juni 2005, 14:11, insgesamt 1-mal geändert.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Clython
User
Beiträge: 151
Registriert: Samstag 21. August 2004, 13:58
Wohnort: Schweiz, BE-2500

Beitragvon Clython » Sonntag 24. Juli 2005, 11:23

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?
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Sonntag 24. Juli 2005, 11:57

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...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Clython
User
Beiträge: 151
Registriert: Samstag 21. August 2004, 13:58
Wohnort: Schweiz, BE-2500

Beitragvon Clython » Sonntag 24. Juli 2005, 12:18

Mein Admin erlaubt (zu Recht) keine solchen Spässe wie offene FTP-Verzeichnisse. Was benutzt du denn als Alternative.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder