Server IP : 127.0.0.2 / Your IP : 18.217.0.242 Web Server : Apache/2.4.18 (Ubuntu) System : User : www-data ( ) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : disk_free_space,disk_total_space,diskfreespace,dl,exec,fpaththru,getmyuid,getmypid,highlight_file,ignore_user_abord,leak,listen,link,opcache_get_configuration,opcache_get_status,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,php_uname,phpinfo,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,pclose,popen,proc_open,proc_close,proc_get_status,proc_nice,proc_terminate,shell_exec,source,show_source,system,virtual MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/lib/python2.7/dist-packages/mx/Misc/ |
Upload File : |
""" Cookie -- Create sendable Netscape Cookies. Needs mxDateTime, mxURL and mxTextTools. Copyright (c) 2000, Marc-Andre Lemburg; All Rights Reserved. See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ from mx import DateTime,URL,TextTools # Version number __version__ = '1.2' # Enable debugging output ? _debug = 0 class Cookie: """ Cookie object, cf. Netscape's specification. """ # Default values expires = None # temporary cookie path = '/' domain = '' secure = 0 def __init__(self, name, value, expires=None, path=None, domain=None, secure=None): """ Create a Netscape cookie for name with the given value. If expires is given, the cookie will be a temporary cookie which expires after a certain amount of time. expires may be given as integer (seconds relative to the current time), DateTime instance (absolute date/time) or RelativeDateTime instance (relative date/time to current time). path, domain, secure work according to the Netscape specification. """ self.name = name self.value = value if expires is not None: # Long living cookie if isinstance(expires, DateTime.DateTimeType): self.expires = expires.gmtime() elif isinstance(expires, DateTime.RelativeDateTime): self.expires = DateTime.gmtime() + expires else: self.expires = DateTime.gmtime() + \ expires * DateTime.oneSecond if path: self.path = path if domain: self.domain = domain if secure: self.secure = 1 def header_content(self, now=DateTime.now,oneSecond=DateTime.oneSecond, urlencode=URL.urlencode): # Add things that always have a value l = ['%s=%s' % (self.name, urlencode(self.value)), 'path=%s' % self.path] if self.expires is not None: l.append('expires=%s' %\ self.expires.strftime('%a, %d %b %Y %H:%M:%S GMT')) if self.domain: l.append('domain=%s' % self.domain) if self.secure: l.append('secure') return ';'.join(l) # Alias for b/w compatibility: content = header_content def set_cookie_header(self): return 'Set-Cookie: %s\r\n' % self.header_content() # Alias for b/w compatibility: http_header = set_cookie_header def cookie_header(self, urlencode=URL.urlencode): return 'Cookie: %s=%s\r\n' % (self.name, urlencode(self.value)) def match(self, url, datetime=None): """ Return 1/0 depending on whether the Cookie matches the given url or not. datetime is used to check for expiration in case the Cookie is a temporary one. It defaults to the current date/time. """ url = URL.URL(url) if self.expires is not None: if datetime is None: datetime = DateTime.now() if self.expires < datetime: if _debug: print 'expired' return 0 if TextTools.prefix(url.path, (self.path,)) is None: if _debug: print 'path does not match' return 0 if TextTools.suffix(url.host, (self.domain,)) is None: if _debug: print 'domain does not match' return 0 return 1 def __str__(self): return 'Set-Cookie: %s' % self.header_content() def __repr__(self): return '<%s.%s "%s = %s" at 0x%x>' % ( self.__class__.__module__, self.__class__.__name__, self.name, self.value, id(self)) ### Set-Cookie header parser def CookieFromHeader(value, splitat=TextTools.splitat, charsplit=TextTools.charsplit,urldecode=URL.urldecode, lower=TextTools.lower, DateTimeFrom=DateTime.DateTimeFrom): """ Parse the value of an Set-Cookie header and return a corresponding Cookie instance. """ items = [x.strip() for x in charsplit(value, ';')] c = Cookie('no-name', '') if not items: return c c.name, value = splitat(items[0], '=') c.value = urldecode(value) if len(items) > 1: for item in items[1:]: key, value = splitat(item,'=') key = lower(key) if key == 'path': c.path = value elif key == 'expires': try: c.expires = DateTimeFrom(value) except ValueError: pass elif key == 'domain': c.domain = value elif key == 'secure': c.secure = 1 return c # Alias for b/w compatibility ParserCookie = CookieFromHeader if __name__ == '__main__': c1 = Cookie('a', 'b', path='/mysite', expires=20, domain='egenix.com') print c1 s1 = c1.header_content() c2 = ParserCookie(s1) print c2 c3 = ParserCookie(s1[:-10]) print c3 print c4 = Cookie('a', 'b', expires=10) print c4.set_cookie_header() s1 = c4.header_content() c5 = ParserCookie(s1) print c5.cookie_header()