Seite 1 von 1

Sessions + mod_python

Verfasst: Dienstag 20. November 2007, 00:59
von lunas
Hi,

kennst sich zufällig jemand mit dem Session-Handling von mod_python aus. Ich möchte es gerne nutzten um persistente Variablen einzurichten, also solche, die auch nach dem Request weiterbestehen.

Ich habe einen Handler, der auf das session dict zugreift, dann eine lange Zeit etwas macht und dann schließlich eine Antwort liefer. Wenn ich nun versuche über einen anderen Handler etwas aus dem Session dict zu lesen, blockiert der zweite Handler leider bis der erste terminiert.

Kann man dieses Verhalten irgendwie umgehen? Ich möchte gleichzeit auf die session Daten zugreifen, ohne zu beachten, ob session schon benutzt wird.

lg, lunas

Verfasst: Dienstag 20. November 2007, 16:28
von Leonidas
Sessions... nimm besser die WSGI-Middleware Beaker und nutze WSGI über FastCGI. Schont die Nerven.

Damit hast du den Vorteil, dass du etwas nutzt, was von vielen Leuten genutzt wird, im Gegensatz zu mod_pythons Sessions die außer von den Leuten die mod_python nutzen (wenn überhaupt) niemand mehr nutzt.

Verfasst: Mittwoch 5. Dezember 2007, 13:07
von lunas
Bin leider jetzt erst wieder dazu gekommen mich um die Sessions zu kümmern...

Leider nutze ich einen shared host webserver und auf dem ist Beakon nicht installiert. Außerdem mag ich die Möglichkeit von mod_python Funktionen via url.py/function aufzurufen. Gibt es noch eine andere Möglichkeit mit mod_python Sessions zu realisieren, die sich nicht gegenseitig blockieren? Auf dem shared host kann ich nur etwas installieren, indem ich es kopiere und den Pfad nachträglich über sys.path.append() hinzufüge.

lunas

Verfasst: Mittwoch 5. Dezember 2007, 13:56
von Leonidas
Reicht doch auch für Beaker...

Verfasst: Sonntag 16. Dezember 2007, 01:45
von lunas
So ganz ist mir noch nicht klar was Du meinst. Ich habe folgendes Beispiel gefunden und modifiziert:

Code: Alles auswählen

def application(environ, start_response):
    session = environ['beaker.session']
    if not session.has_key('value'):
        session['value'] = 0
    session['value'] += 1
    session.save()
    start_response('200 OK', [('Content-type', 'text/plain')])
    return ['The current value is: %d' % session['value']]
        
from beaker.session import SessionMiddleware

application = SessionMiddleware(
    application,
    key='mysession',
    secret='randomsecret',
)

'''
from wsgiref import simple_server
httpd = simple_server.WSGIServer(
    ('',8000),
    simple_server.WSGIRequestHandler,
)
httpd.set_app(application)
httpd.serve_forever()
'''
from wsgiref.handlers import CGIHandler
CGIHandler().run(application)
Wenn ich den auskommentierten code laufen lasse, dann wird der Zähler korrekt inkrementiert. Allerdings funktioniert es nicht, wenn ich den code so ausführe wie er oben steht. Dann ist der Zähler ständig 1. Was meinst Du denn mit
Leonidas hat geschrieben: nimm besser die WSGI-Middleware Beaker und nutze WSGI über FastCGI
Ist es so richtig, wie ich es gemacht habe? So weit ich weiß, habe ich kein FastCGI zur Verfügung, sondern nur CGI.

lg,
lunas

Verfasst: Sonntag 16. Dezember 2007, 03:13
von Leonidas
Dann versuch es doch mal mit WSGI über mod_python,etwa mit diesem Server.