hmm, tipnul bych si ze to ze request.remote vraci 'localhost' bude i problem proc sessions nefunguji jak maji. taky bych si tipnul ze pricina proc je remote 'localhost' bude prave prevod adres z privatni site. je ten server na kterem bezi cherrypy ten samy server co zprostredkovava pripojeni k Internetu pocitacum z privatni site? nicmene nezapominejte ze z pohledu pocitace v Internetu maji vsechny pocitace ve VPN stejnou IP adresu.
v tomto pripade bych dopurucoval zapomenout na sessions a udelat 'praci sessions rucne'. nejakou variaci na kod nize. kod je funkcni aplikace, chybi pouze login.conf + nekolik malickosti jako je odhlaseni uzivatele a smazani neaktivnich seanci jednou za cas (po pul hodine..) #!/usr/bin/python # -*- coding: utf-8 -*- HTMLheader = """ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" > <title>login</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> """ HTMLfooter = """ </body></html> """ HTMLloginform = ''' <form method="post" action="index?login"> <input type="text" name="user"> <input type="password" name="passwd"> <input type="submit"> </form> ''' import cherrypy import random from time import time class Login: def __init__(self): self.sessions = {} random.seed() def freshid(self): "Vrati jednoznacny retezec identifikujici seanci" def _id(): return str(random.random())[2:] id = _id() while id in self.sessions: id = _id() return id def setsessiondata(self, sessionid, data): "Spoji data se seanci sessionid" self.sessions[sessionid] = data def getsessiondata(self, sessionid): "Vrati data seance sessionid" if sessionid in self.sessions: return self.sessions[sessionid] else: return None @cherrypy.expose def index(self, login=None, user=None, passwd=None, sessionid=None): "hlavni a jedina stranka" if not (login is None or user is None or passwd is None): # prihlaseni uzivatele (overit heslo,...) sessionid = self.freshid() self.setsessiondata(sessionid, dict(user=user, time=time())) html = '''<h1>welcome %s</h1> <p><a href="index?sessionid=%s">your data</a> ''' % (user, sessionid) elif sessionid is not None: # prihlaseny uzivatel data = self.getsessiondata(sessionid) if data is None: html = '<h1>timeout</h1>' else: html = '<h1>your data: %s' % data else: # formular pro prihlaseni html = HTMLloginform return HTMLheader + html + HTMLfooter cherrypy.quickstart(Login(), config="login.conf") honza. 3.6.07, Vladislav Ludík <[EMAIL PROTECTED]>: > > Jan Jakubuv napsal(a): > > *cherrypy.request.remote.ip vrací: /localhost/ > > cherrypy.request.remote vrací: /http.Host('localhost', 1111, 'localhost')/ > > > u me vsechno funguje jak ma. request.remote mi vraci instanci Host > odpovidajici volajici strane. prvni polozka by mela by urcite > _ciselna_ ip adresa, jste si jisty, ze volate spravnou funkci? > zkousite to na lokalni siti nebo na Internetu? mate posledni verzi > cherrypy? > > honza. > > Je sice pravda, že přes víkend jsem na VPN-ce a přímo na lokální síti jsem > to zatím nezkoušel. > > Ale i tak moje IP adresa je reálná přes VPN připojení z lokální sítě: > > Adaptér pro protokol PPP : > > Přípona DNS podle připojení . . . : > Popis . . . . . . . . . . . . . . : WAN (PPP/SLIP) Interface > Fyzická Adresa. . . . . . . . . . : 00-53-45-00-00-00 > Protokol DHCP povolen . . . . . . : Ne > Adresa IP . . . . . . . . . . . . : 192.168.1.212 > Maska podsítě . . . . . . . . . . : 255.255.255.255 > Výchozí brána . . . . . . . . . . : > Servery DNS . . . . . . . . . . . : 192.168.1.1 > Primární server WINS. . . . . . . : 192.168.1.1 > > VL > > _______________________________________________ > Python mailing list > [email protected] > http://www.py.cz/mailman/listinfo/python > _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
