Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]71[/thread]

Arbeiten mit Sessions-ID's: wie geschieht das unter Perl



<< |< 1 2 >| >> 17 Einträge, 2 Seiten
PerlProjekt
 2003-10-20 14:01
#6979 #6979
User since
2003-10-18
7 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

Mich beschäftigt schon seit langen das Thema "Session-ID", leider bin ich mir hierüber noch nicht im klaren.

Bevor ich jedoch Anfange, möchte ich euch bitten, mir wirklich nur Tips und Hilfen zugeben, die mich an dieses Problem heranführen und nicht
Quote
nimm doch einfach nen fertigen Shop
usw.

Das Problem ist hier, das ich füe einen Freund einen Webshop erstellen möchte. Es ist alles soweit klar(MySQL, Template usw.). Gedanken mache ich mir aber über den Warenkorb. Was ist, wenn sich ein eventueller Kunde, es anders überlegt und den Bestellvorgang abricht(Browser schliesst).
Wie bekomme ich das dann raus(bzw. Script), das es die Bestelldaten wieder löscht?

ZUm besserem Verständniss hier mal meine Gedanken
1. Kunde geht in den shop und bekommt eine sid zugeteilt(IP+Timestamp). Es wird darauf hin ein Datensatz angelegt.
2. Alle Artikel, die der Kunde in den Warenkorb legt, werden in diesem Datensatz abgelegt.
3.bei Ansicht bzw. Bestellung wird der komplette Warenkorp übergebn und dem Kunden angezeigt ("Select * From warenkorp WHERE Sid =$sid")
4. Sollte es mal passieren, das die Verbindung unterbricht oder der Kunde den Browser schliesst, soll der Warenkorb mit dieser Sid gelöscht werden.

Das ständige übergeben der aktuellen Sid sollte nicht das Problem sein. halt nur wie gesagt der Pkt. 4, da bin ich entweder etwas verbohrt oder .... was auch immer.

Für eure Hinweise, Ratschläge und Tips bin ich Sehr dankbar.

Cu Jens Schwarz
jan10001
 2003-10-20 14:13
#6980 #6980
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
Quote
1. Kunde geht in den shop und bekommt eine sid zugeteilt(IP+Timestamp). Es wird darauf hin ein Datensatz angelegt.
Die IP würde ich komplett rausnehmen und lieber ne Zufallszahl erzeugen.

Quote
4. Sollte es mal passieren, das die Verbindung unterbricht oder der Kunde den Browser schliesst, soll der Warenkorb mit dieser Sid gelöscht werden.
Wo liegt das Problem? Setze einen Timestamp und wenn der Kunde innerhalb von z.B. 15 min nichts gemacht hat wird dieser automatisch gelöscht.
format_c
 2003-10-20 14:35
#6981 #6981
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Ich denke mal jan10001 meint das mit dem "automatisch gelöscht", dass so, wenn eine neue SID von irgendwoher angefordert wird, gleich mit abgelaufene SID gelöscht werden. Musst dafür jetzt keinen cron-job anwerfen oder so.

ICh bin auch der Meinung wie jan10001, die IP komplett draußen zu lassen.
Denn sobald, der Kunde über mehrere Proxies geht, behält er eine SID vielleicht nur jedes 7. Mal oder so, da er mal über den und dann mal über den Proxy geht.
So etwas ist immer ärgerlich.

Gruß Alex
PerlProjekt
 2003-10-20 14:36
#6982 #6982
User since
2003-10-18
7 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo jan,

Danke für deine schnelle Antwort :) Und wie realisiere ich dies ? Mit nen Cronjob? Geht leider nicht, da diese vom Provider nur 1xtäglich ausgeführt werden.
Genau da verhake ich mich. Um zu zuwissen, das der Kunde 15 min nichts gemacht hat, müßte das entsprechende Script ausgeführtwerde, das es überprüfen kann wie lange der Kunde nichts gemacht hat oder ob er noch da ist.
Gut ne lösung wäre, wenn ein anderer Kunde das Script aufruft, was Daten in den Warenkorb legt und das Script dann gleich mal noch mit nachschaut wer in den letzten 15 Min Aktionen ausgeführt hat und entsprechende handelt und dann den eigentlichen Kunde weiterbearbeitet.

Cu Jens
PerlProjekt
 2003-10-20 14:43
#6983 #6983
User since
2003-10-18
7 Artikel
BenutzerIn
[Homepage] [default_avatar]
@fomatc und jan:
Danke für den Hinweis, daran hatte oich gar nicht gedacht:) Leider hat mein Provider diebezüglich auch keine entsprechenden PM's installiert. Ich hatte irgendwo mal im Net ein PM gesehen, was sehr gut sein soll, Es müßte doch auch gehen, wenn ich es in ein lib-Verz meines cgi-bin lege und dann mit use lib "/lib/"; einbinde oder?

Cu JEns
format_c
 2003-10-20 14:50
#6984 #6984
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Was brauchst du mehr als CGI?

Die Session wird dann überall hin als Prameter mitgeschleift und/oder optional zusätzlich die SID noch als Cookie speichern fallst der Kunde mal den Browser schließt.
Mich komplett auf Cookie verlassen würde ich mich aber nicht. Es gibt viele Menschen die noch Cookies als gefährlich einschätzen und somit in ihrem Browser verweigern.

Das Modul CGI bietet in Richtung Webandwendungen eine vielzahl elganter Möglichkeiten. am besten wird sein, wenn du dir mal die Doku mal durchliest:
http://www.perldoc.com/perl5.8.0/lib/CGI.html

Gruß Alex
PerlProjekt
 2003-10-20 15:21
#6985 #6985
User since
2003-10-18
7 Artikel
BenutzerIn
[Homepage] [default_avatar]
@format_c Mit COOKIEs will ich nichts zu tun haben, auch wenn dessen verwendung mit CGI recht simpel ist.

Langsam glaube ich, dämmerts.. :)
Also Ich habe ein Script namens warenkorb.pl-sollte ein kUnde dieses Script aufrufen, wenn er sich den Warenkorb anzeigen lassen will, da wird acu eine Sub aufgerufen, die alle Timestamps der Tabelle auf deren Ablauf überprüft, dies kann ich gleich mit der Selectabfrage machen, sollte eine Sid einen vorgegebenen Wert überschritten haben, so wird diese gelöscht. Hehe..

Aber da stellt sich für mich das Problem mit MySQL.
Was ist, wenn 2 User kurz nacheinander in den Warenkorb gehen und 1.Aufruf hat die Anzahl der abgelaufenen Sid's und der Zweite auch nun löscht der 1. Aufruf diese und der 2. erhält ne Error 500 Meldung, da die 3 abgelaufenen Sids ja schon vom ersten Aufruf gelöscht sind.

Genau da verstricke ich mich oder ist es sinnlos so zu denken?

Cu Jens
Strat
 2003-10-20 15:30
#6986 #6986
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
dann musst du den SID's noch ein Verfallsdatum mitgeben, und dann darf halt jeder nur die SID's loeschen, die vor mehr als x Minuten abgelaufen sind. Vielleicht kannst du ja auch mit dem LOCK-Befehl bestimmen, dass erst der eine seine Datenbankgeschichte machen kann, und der zweite warten muss, bis er fertig ist.
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Geewiz
 2003-10-22 01:26
#6987 #6987
User since
2003-09-29
69 Artikel
BenutzerIn
[Homepage] [default_avatar]
Am Rand möchte ich auf das Modul CGI::Session hinweisen, das alle bisher in diesem Thread genannten Funktionen bietet (zB Verfalldatum). Die Doku enthält ein sehr hilfreiches Tutorial.

CGI::Session::Auth ergänzt noch die Authentifizierung des Besuchers.
pktm
 2003-10-22 11:19
#6988 #6988
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ich möchte hier auf den Artikel in der FAQ hinweisen, der das Problem glaube ich genau trifft:
http://wiki.perl-community.de/bin/view/Wissensbasis/PerlTutorials => SessionImRequest
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2003-10-20 14:01.