Sessions + mod_python

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
lunas
User
Beiträge: 87
Registriert: Samstag 2. Dezember 2006, 10:56

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunas
User
Beiträge: 87
Registriert: Samstag 2. Dezember 2006, 10:56

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Reicht doch auch für Beaker...
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunas
User
Beiträge: 87
Registriert: Samstag 2. Dezember 2006, 10:56

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dann versuch es doch mal mit WSGI über mod_python,etwa mit diesem Server.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten