Sessions

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi burli,

zope kennt auch sessions. Es gibt auch eine Deutsche Zope User Group


Gruß

Dookie
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

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
Gast

hi

ich glaube das ist ziemlich interessant:

http://sourceforge.net/projects/gila/

mfg

rolgal
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

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
Sneaker
User
Beiträge: 52
Registriert: Montag 19. Januar 2004, 22:19
Wohnort: Vor meinem Computer
Kontaktdaten:

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 8)) wenn interesse besteht musste mal fragen ;)
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

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
Sneaker
User
Beiträge: 52
Registriert: Montag 19. Januar 2004, 22:19
Wohnort: Vor meinem Computer
Kontaktdaten:

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
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Jo, danke. Dann werd ich mich mal durchkämpfen ;)
Aber funktionieren tuts schon, oder?
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Ich hab euch mal nach Netzwerke verschoben. :wink: Ich hab mich hier mal ein wenig schwer getan, aber die Tendenz ist wohl doch eher CGI - Scripting als Allgemein nur Session...

Milan
Sneaker
User
Beiträge: 52
Registriert: Montag 19. Januar 2004, 22:19
Wohnort: Vor meinem Computer
Kontaktdaten:

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
Antworten