Kann mir jemand hier oder im wiki ein Beispiel geben wie ich bei Colubrid mit Cookies arbeiten kann ?
Ich bin Anfänger und durch dieses Forum im Zusammenhang mit Python und Webprogrammierung auf colubrid gestoßen, ich probiere schon seit einer weile damit rum habe aber keinen Erfolg.
Danke im Voraus
Cookies und Colubrid
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Das ist eine gute Frage, die ich mir auch demächst mal stellen muß, bis dahin kann ich dir allerdings nicht weiter helfen
Schau dir mal die Sourcen an:
http://wsgiarea.pocoo.org/trac/browser/ ... ls.py#L235
http://wsgiarea.pocoo.org/trac/browser/ ... st.py#L202
IMHO ist self.request.COOKIE ein Art Dict...
Schau dir mal die Sourcen an:
http://wsgiarea.pocoo.org/trac/browser/ ... ls.py#L235
http://wsgiarea.pocoo.org/trac/browser/ ... st.py#L202
IMHO ist self.request.COOKIE ein Art Dict...
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Aber nur eine Art. Es ist ein Cookie Objekt. Beschrieben ist es hier: http://docs.python.org/lib/module-Cookie.htmljens hat geschrieben:IMHO ist self.request.COOKIE ein Art Dict...
Es ist aber leicht Verändert und merkt sich automatisch die Änderungen und passt die Header an. Also braucht man kein setcookie wie in PHP.
TUFKAB – the user formerly known as blackbird
Gut, also ist self.request.COOKIES ein Cookie-Objekt abgeleitet von dem Cookiemodul aus Python.
Wenn ich jetzt so was mache wie self.request.COOKIES['id'] = '12345' dann erscheint im Header an den Client auch ein "Set-Cookie:id=12345;",
wie aber bekomme ich denn den Cookie "ausgelesen" ?
Ein self.request.COOKIES.load(os.environ['HTTP_COOKIE']) fällt doch flach oder übersehe ich hier was ?
Mal eine ganz andere Frage wegen der Mühen zum umstieg auf wsgi, ist es zu erwarten das z.B. mod_python irgendwann wsgi unterstützt oder
muss man davon ausgehen das es bezogen auf Apache nur als cgi bzw. fastcgi laufen wird ?
Wenn ich jetzt so was mache wie self.request.COOKIES['id'] = '12345' dann erscheint im Header an den Client auch ein "Set-Cookie:id=12345;",
wie aber bekomme ich denn den Cookie "ausgelesen" ?
Ein self.request.COOKIES.load(os.environ['HTTP_COOKIE']) fällt doch flach oder übersehe ich hier was ?
Mal eine ganz andere Frage wegen der Mühen zum umstieg auf wsgi, ist es zu erwarten das z.B. mod_python irgendwann wsgi unterstützt oder
muss man davon ausgehen das es bezogen auf Apache nur als cgi bzw. fastcgi laufen wird ?
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Ich hab mich noch nicht damit beschäftigt, aber was spuckt ein self.request.echo(self.request.COOKIES) aus?beyama hat geschrieben:wie aber bekomme ich denn den Cookie "ausgelesen" ?
Ich schätze du kannst wie auf ein dict auf die cookies zugreifen...
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Code: Alles auswählen
self.request.COOKIES['mein_cookie'].value
TUFKAB – the user formerly known as blackbird
Ich weiß nicht genau was es mit dem echo auf sich hat, aber ich vermute das es etwas ausgibt.
Mein Problem ist aber nicht wie ich an Daten ran komme die ich in das Cookieobjekt gesteckt habe bzw. wie ich sie an den Client sende (die Header werden ja automatisch angepasst), mein Problem ist wie ich die Cookiedaten vom Client wieder zurück bekomme.
Was ja bei der Standard Cookie-Klasse mit der Methode read() passiert.
Mein Problem ist aber nicht wie ich an Daten ran komme die ich in das Cookieobjekt gesteckt habe bzw. wie ich sie an den Client sende (die Header werden ja automatisch angepasst), mein Problem ist wie ich die Cookiedaten vom Client wieder zurück bekomme.
Was ja bei der Standard Cookie-Klasse mit der Methode read() passiert.
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Nicht ganz. Eher das hier:jens hat geschrieben:self.request.echo(txt) ist quasi das selbe wie self.request.write(str(txt))
Code: Alles auswählen
def echo(self, *args):
if not args:
raise ArgumentError, 'no data given'
for arg in args:
self.write(str(arg))
TUFKAB – the user formerly known as blackbird
Ja Postings haben sich überschnitten. Ich kann zu meiner Schande
an der Stelle nicht mitreden, da ich nicht weiß was dieses *args
bedeutet (ich denke da immer an Zeiger), aber wie gesagt ich bin Python
Anfänger und meine Motivation die Sprache zu lernen liegt momentan
Primär in der Webprogrammierung ansonsten bin ich eher an Embeddedsachen
interessiert, aber egal.
Ich habe gerade einfach das Problem das ich nicht weiß wie ich die
Cookie-Daten vom Client wieder zurück bekomme.
an der Stelle nicht mitreden, da ich nicht weiß was dieses *args
bedeutet (ich denke da immer an Zeiger), aber wie gesagt ich bin Python
Anfänger und meine Motivation die Sprache zu lernen liegt momentan
Primär in der Webprogrammierung ansonsten bin ich eher an Embeddedsachen
interessiert, aber egal.
Ich habe gerade einfach das Problem das ich nicht weiß wie ich die
Cookie-Daten vom Client wieder zurück bekomme.
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Du willst also Daten zum Webbrowser des Users schicken?
Schau dir mal dieses Beispiel an:
self.request.write('string') schickt einfach Daten zum Client. (Falls du das meinst)
Schau dir mal dieses Beispiel an:
Code: Alles auswählen
from colubrid import BaseApplication, execute
from time import time
class Application(BaseApplication):
def process_request(self):
if 'zeit' in self.request.COOKIES:
t = self.request.COOKIES['zeit'].value
self.request.write('Dein Letzter Besuch war um %s.' % t)
else:
self.request.COOKIES['zeit'] = time()
self.request.write('Das ist dein Erster Besuch.')
app = Application
if __name__ == '__main__':
execute()
TUFKAB – the user formerly known as blackbird
Ich meine schon das in deinem Code-Beispiel, aber das funktioniert (bei mir) nicht.
Ich habe es erst versucht, in das ein zu flechten was ich bis jetzt mit colubrid
gebaut hab, ging aber nicht, dann habe ich deine Variante ausprobiert und sie ging ebenfalls nicht.
Man kommt immer wieder bei "Das ist dein Erster Besuch." raus.
Wenn ich mir die http Header anschaue, dann sehe ich das Firefox
zwar das set-cookie... bekommt aber es nicht wieder zurück gibt.
Auch wenn ich dem Browser so einstelle das er mich vor dem annehmen
von Cookies fragt, reagiert er gar nicht auf den Cookie von Colubrid.
Ich kann mir das nicht erklären.
Ich habe es erst versucht, in das ein zu flechten was ich bis jetzt mit colubrid
gebaut hab, ging aber nicht, dann habe ich deine Variante ausprobiert und sie ging ebenfalls nicht.
Man kommt immer wieder bei "Das ist dein Erster Besuch." raus.
Wenn ich mir die http Header anschaue, dann sehe ich das Firefox
zwar das set-cookie... bekommt aber es nicht wieder zurück gibt.
Auch wenn ich dem Browser so einstelle das er mich vor dem annehmen
von Cookies fragt, reagiert er gar nicht auf den Cookie von Colubrid.
Ich kann mir das nicht erklären.
Sehr komisch, ich habe es gerade noch mal probiert und mit Firefox
geht es nicht, mit links2 allerdings funktioniert es.
Ich habe keine Idee woran das liegt ich habe jedenfalls auf anderen
Seiten keine Probleme mit Firefox und Cookies.
EDIT:
Nach dem ich es unter Safari und Firefox auf anderen Rechnern probiert habe und es überall ging habe ich mein Firefox
zurück gesetzt, nun geht es auch auf meinem Arbeitsrechner. Keine Ahnung woran es lag.
Vielen Dank für eure Hilfe.
geht es nicht, mit links2 allerdings funktioniert es.
Ich habe keine Idee woran das liegt ich habe jedenfalls auf anderen
Seiten keine Probleme mit Firefox und Cookies.
EDIT:
Nach dem ich es unter Safari und Firefox auf anderen Rechnern probiert habe und es überall ging habe ich mein Firefox
zurück gesetzt, nun geht es auch auf meinem Arbeitsrechner. Keine Ahnung woran es lag.
Vielen Dank für eure Hilfe.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Bei colubrid v1.0 wurde das wohl geändert:blackbird hat geschrieben:Code: Alles auswählen
from colubrid import BaseApplication, execute from time import time class Application(BaseApplication): def process_request(self): if 'zeit' in self.request.COOKIES: t = self.request.COOKIES['zeit'].value self.request.write('Dein Letzter Besuch war um %s.' % t) else: self.request.COOKIES['zeit'] = time() self.request.write('Das ist dein Erster Besuch.') app = Application if __name__ == '__main__': execute()
http://wsgiarea.pocoo.org/colubrid/docu ... management
Nur mal so als Anmerkung, weil ich gerade auch cookies behandeln willexample:
To remove existing cookies use response.delete_cookie:Code: Alles auswählen
response.set_cookie('username', 'myname', domain='.mydomain.com')
Code: Alles auswählen
response.delete_cookie('username')
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
So, ich hab mal ein Beispiel für colubrid 1.0 gemacht: [wiki]Colubrid/Cookie Handling[/wiki]
Es gibt allerdings ein Bug beim löschen von Cookies: http://trac.pocoo.org/ticket/28
Aber das ist sicher schnell behoben... (Oder hab ich was falsch gemacht???)
EDIT: Ist es eigentlich normal, das man ein cookie direkt nach dem setzten nicht lesen kann??? Also das:
Es gibt allerdings ein Bug beim löschen von Cookies: http://trac.pocoo.org/ticket/28
Aber das ist sicher schnell behoben... (Oder hab ich was falsch gemacht???)
EDIT: Ist es eigentlich normal, das man ein cookie direkt nach dem setzten nicht lesen kann??? Also das:
Code: Alles auswählen
self.response.set_cookie(self.CookieName, Text)
if self.page_msg_debug == True:
CookieData = self.request.cookies[self.CookieName].value
self.page_msg("test Cookie: '%s'" % CookieData)
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
@blackbird: Kann es sein, das man ein cookie nicht mehr innerhalb einer middleware setzten kann?
Wenn ich mir das recht überlege, ist das wohl auch logisch, denn zu dem Zeitpunkt wurde der Header schon verschickt, oder???
Allerdings wäre es IMHO nett, wenn dann eine exception geworfen wird! Ich hab eine ganze weile gebraucht, bis ich das herraus gefunden hab...
Wenn ich mir das recht überlege, ist das wohl auch logisch, denn zu dem Zeitpunkt wurde der Header schon verschickt, oder???
Allerdings wäre es IMHO nett, wenn dann eine exception geworfen wird! Ich hab eine ganze weile gebraucht, bis ich das herraus gefunden hab...