Seite 1 von 1
Sessions
Verfasst: Dienstag 9. März 2004, 18:28
von burli
Hi,
wie kann ich in Python mit Sessions arbeiten? Ich habe bisher nur die pyweblib gefunden, bekomme das aber nicht zum laufen. Kann mir jemand nen Tip geben wie ich das zum Laufen bekomme? Oder kennt jemand was anderes?
Wäre dankbar wenn mir da jemand weiterhelfen könnte
gruß
burli
Verfasst: Dienstag 9. März 2004, 19:03
von Dookie
Hi burli,
zope kennt auch sessions. Es gibt auch eine
Deutsche Zope User Group
Gruß
Dookie
Verfasst: Dienstag 9. März 2004, 19:09
von burli
Hi Dookie,
ich kenne Zope (vom hörensagen). Ist mir aber ne Nummer zu groß da ich ne eigene Applikation schreiben will. Und so schwer kann das ja auch nicht sein pyweblib zum laufen zu bekommen
Gruß
burli
Verfasst: Dienstag 9. März 2004, 19:24
von Gast
hi
ich glaube das ist ziemlich interessant:
http://sourceforge.net/projects/gila/
mfg
rolgal
Verfasst: Dienstag 9. März 2004, 19:31
von burli
Hm, da hab ich gleich das erste Problem: das setzt mod_python voraus. Auf dem Server hab ich aber keinen Zugriff darauf und kann das nicht nachinstallieren. Ich hab nur ein CGI Interface
Verfasst: Dienstag 9. März 2004, 20:18
von Sneaker
Hmmmm
das ist schlecht ich hätte dir sonst spyce vorgeschlagen
und sonst heisst es selber schreiben

hab mir mal sowas auch geschrieben aber nie zu ende gebracht und getestet (halt so aus langerweile geschrieben

) wenn interesse besteht musste mal fragen

Verfasst: Dienstag 9. März 2004, 22:19
von burli
Hm, dann frag ich einfach mal ganz frech

Aber gibt es denn kein fertiges Modul für Sessions das auch ohne mod_python läuft? Kann ich mir fast nicht vorstellen. Gibt doch sonst alles
Verfasst: Dienstag 9. März 2004, 22:38
von Sneaker
ist mir nicht bekannt...
Code: Alles auswählen
import md5
import time
import string
import os
from exceptions import Exception
from random import randrange
class session_not_exist(Exception):
def __init__(self, msg = "Session isn't started. Start Session and retry"):
self.errno = 1001
self.errmsg = msg
class session_unknown_key(Exception):
def __init__(self, msg):
self.errno = 1002
self.errmsg = msg
class session_unknown_type(Exception):
def __init__(self, msg):
self.errno = 1003
self.errmsg = msg
class session_not_started(Exception):
def __init__(self, msg = "Session isn't started. Start Session and retry"):
self.errno = 1004
self.errmsg = msg
class session_is_running(Exception):
def __init__(self, msg = "Session is running, stop the session and retry"):
self.errno = 1005
self.errmsg = msg
class session:
def __init__(self, save_path = './tmp'):
self._save_path = save_path
self._values = {}
self._session_id = None
def save_path(self, path = None):
if path:
if self._session_id:
raise session_is_running()
self._save_path = path
return self._save_path
def start(self, session_id = None):
if not session_id:
while 1:
session_id = md5.new(randrange(stop = time.time())).digest()
if not self._exist_session(session_id):
break
elif not self._exist_session(session_id):
raise session_not_exist("Unknown Session ID")
self._session_id = session_id
try:
self._fp = open('sess_'+self.session_id,'rw')
except(IOError, e):
raise e
while 1:
lines = self._fp.readlines(8*1024)
if not lines:
break
for oneline in lines:
self._encode(oneline)
return self._session_id
def session_id(self):
if self._session_id:
raise session_not_started()
return self._session_id
def register(self, key, value = None):
if self._session_id:
raise session_not_started()
self._values[key] = value
def is_registered(self, key):
if self._session_id:
raise session_not_started()
if self._values.has_key(key):
return True
return False
def unregister(self, key):
if self._session_id:
raise session_not_started()
del self._values[key]
def unset(self):
if self._session_id:
raise session_not_started()
self._values = {}
def set(self, key, value):
if self._session_id:
raise session_not_started()
if self._values.has_key(key):
self._values[key] = value
else:
raise session_unknown_key("Unknown Key: "+str(var))
def get(self, key):
if self._session_id:
raise session_not_started()
return self._values.get(key, None)
def destroy(self):
if self._session_id:
raise session_not_started()
try:
os.remove(self._save_path+'/sess_'+self._session_id)
except (OSError, e):
raise e
self._session_id = None
def stop(self):
if self._session_id:
raise session_not_started()
try:
self._fp.write(self._decode())
except IOError, e:
raise e
close(self._fp)
########################## Private Funktions #######################
def _encode(self, line):
splitline = string.split(line, ';')
for split in splitline:
var, option = string.split(split, '|')
option = string.split(option, ':')
if option[0] == 's':
value = string.split(option[-1], '"')
self._values[var] = str(value)
elif option[0] == 'i':
self._values[var] = int(option[1])
elif option[0] == 'f':
self._values[var] = float(option[1])
def _decode(self):
line = ''
for key in self._values.keys():
if type(self._values[key]) is str:
line += ('%s|s:%d:"%s";')%(key, len(self._values[key]), self._values[key])
elif type(self._values[key]) is int:
line += ('%s|i:%d;')%(key, self._values[key])
elif type(self._values[key]) is float:
line += ('%s|f:%f;')%(key, self._values[key])
else:
raise session_unknown_type("Unknown type at key: " + str(key) + ", Type: " + type(self._values[key]))
def _exist_session(session_id):
return os.path.exists(self._save_path+'/sess_'+session_id)
leider oder kommentare, hab ich halt für mcih geschrieben

und ich hab versucht mich an die PHP funktions namen anzulehnen
Verfasst: Dienstag 9. März 2004, 22:49
von burli
Jo, danke. Dann werd ich mich mal durchkämpfen

Aber funktionieren tuts schon, oder?
Verfasst: Mittwoch 10. März 2004, 10:29
von Milan
Hi. Ich hab euch mal nach Netzwerke verschoben.

Ich hab mich hier mal ein wenig schwer getan, aber die Tendenz ist wohl doch eher CGI - Scripting als Allgemein nur Session...
Milan
Verfasst: Mittwoch 10. März 2004, 16:04
von Sneaker
das ja das problem ich weiss nicht ob es funzt

aber synatax fehler sollte kein drin das doch schonmal gut

und man muss die sessions noch von hand löschen also sowas wie nen carbage collector hab ich nicht drin aber ist auch nicht das problem das hinzufügen