def set_cookie( self, name: str, value: str, expires: int = -1, domain: str = "", secure: str = "false", httponly: bool = False, path: str = None, ): """Sets a cookie.""" morsel = Morsel() name, value = str(name), str(value) morsel.set(name, value, quote_plus(value)) if isinstance(expires, int) and expires < 0: expires = -1000000000 morsel["expires"] = expires morsel["path"] = path or "/" if domain: morsel["domain"] = domain if secure: morsel["secure"] = secure if httponly: morsel["httponly"] = httponly self.headers._list.append(("set-cookie".encode("latin-1"), morsel.OutputString().encode("latin-1")))
def setcookie( name, value, expires="", domain=None, secure=False, httponly=False, path=None, samesite=None, ): """Sets a cookie.""" morsel = Morsel() name, value = safestr(name), safestr(value) morsel.set(name, value, quote(value)) if isinstance(expires, int) and expires < 0: expires = -1000000000 morsel["expires"] = expires morsel["path"] = path or ctx.homepath + "/" if domain: morsel["domain"] = domain if secure: morsel["secure"] = secure if httponly: morsel["httponly"] = True value = morsel.OutputString() if samesite and samesite.lower() in ("strict", "lax", "none"): value += "; SameSite=%s" % samesite header("Set-Cookie", value)
def dumps(self): morsel = Morsel() morsel.set(self.name, self.value, self.value) morsel['expires'] = '' if self.expires is None else self.expires morsel['path'] = self.path if self.domain: morsel['domain'] = self.domain if self.secure: morsel['secure'] = self.secure ret = morsel.OutputString() if self.httponly: ret += '; httponly' return ret
def setcookie(name, value, expires="", domain=None, secure=False, httponly=False, path=None): """Sets a cookie.""" morsel = Morsel() name, value = safestr(name), safestr(value) morsel.set(name, value, quote(value)) if isinstance(expires, int) and expires < 0: expires = -1_000_000_000 morsel["expires"] = expires morsel["path"] = path or ctx.homepath + "/" if domain: morsel["domain"] = domain if secure: morsel["secure"] = secure value = morsel.OutputString() if httponly: value += "; httponly" header("Set-Cookie", value)
def setcookie(name, value, expires = '', domain = None, secure = False, httponly = False, path = None): """Sets a cookie.""" morsel = Morsel() name, value = safestr(name), safestr(value) morsel.set(name, value, quote(value)) if isinstance(expires, int) and expires < 0: expires = -1000000000 morsel['expires'] = expires morsel['path'] = path or ctx.homepath + '/' if domain: morsel['domain'] = domain if secure: morsel['secure'] = secure value = morsel.OutputString() if httponly: value += '; httponly' header('Set-Cookie', value)
def make_cookie(name, value, expires='', path='', domain=None, secure=False, httponly=False): """Make a cookie string""" morsel = Morsel() morsel.set(name, value, quote(value)) if isinstance(expires, int) and expires < 0: expires = -1000000000 morsel['expires'] = expires morsel['path'] = path if domain: morsel['domain'] = domain if secure: morsel['secure'] = secure value = morsel.OutputString() if httponly: value += '; httponly' return value
def get_morsel(name, value, expires=-1, domain=None, secure=False, httponly=False, path=None): morsel = Morsel() morsel.set(name, value, quote(value)) if expires < 0: expires = -1000000000 morsel['expires'] = expires morsel['path'] = path if domain: morsel['domain'] = domain if secure: morsel['secure'] = secure value = morsel.OutputString() if httponly: value += '; httponly' return morsel
def run_attr_and_method(self): print('[{}]:'.format(inspect.getframeinfo(inspect.currentframe())[2])) m = Morsel() m.set('foo', 'bar', 'baz') print(f'key: {m.key}') # => key: foo print(f'value: {m.value}') # => value: bar print(f'coded_value: {m.coded_value}') # => coded_value: baz print(m) # => Set-Cookie: foo=baz print(m.output()) # => Set-Cookie: foo=baz print(m.OutputString()) # => foo=baz print(m.js_output())
def force_clear_cookie(self, name, path="/", domain=None): """Deletes the cookie with the given name. Tornado's cookie handling currently (Jan 2018) stores cookies in a dict keyed by name, so it can only modify one cookie with a given name per response. The browser can store multiple cookies with the same name but different domains and/or paths. This method lets us clear multiple cookies with the same name. Due to limitations of the cookie protocol, you must pass the same path and domain to clear a cookie as were used when that cookie was set (but there is no way to find out on the server side which values were used for a given cookie). """ name = escape.native_str(name) expires = datetime.datetime.utcnow() - datetime.timedelta(days=365) morsel = Morsel() morsel.set(name, '', '""') morsel['expires'] = httputil.format_timestamp(expires) morsel['path'] = path if domain: morsel['domain'] = domain self.add_header("Set-Cookie", morsel.OutputString())
def set_cookie(self, name, value, path="/", domain=None, max_age=None, expires=None, secure=False, httponly=False, comment=None): """Set a cookie to be sent with a Set-Cookie header in the response :param name: name of the cookie (a binary string) :param value: value of the cookie (a binary string, or None) :param max_age: datetime.timedelta int representing the time (in seconds) until the cookie expires :param path: String path to which the cookie applies :param domain: String domain to which the cookie applies :param secure: Boolean indicating whether the cookie is marked as secure :param httponly: Boolean indicating whether the cookie is marked as HTTP Only :param comment: String comment :param expires: datetime.datetime or datetime.timedelta indicating a time or interval from now when the cookie expires """ # TODO(Python 3): Convert other parameters (e.g. path) to bytes, too. if value is None: value = b'' max_age = 0 expires = timedelta(days=-1) name = isomorphic_decode(name) value = isomorphic_decode(value) days = {i+1: name for i, name in enumerate(["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"])} if isinstance(expires, timedelta): expires = datetime.utcnow() + expires if expires is not None: expires_str = expires.strftime("%d %%s %Y %H:%M:%S GMT") expires_str = expires_str % days[expires.month] expires = expires_str if max_age is not None: if hasattr(max_age, "total_seconds"): max_age = int(max_age.total_seconds()) max_age = "%.0d" % max_age m = Morsel() def maybe_set(key, value): if value is not None and value is not False: m[key] = value m.set(name, value, value) maybe_set("path", path) maybe_set("domain", domain) maybe_set("comment", comment) maybe_set("expires", expires) maybe_set("max-age", max_age) maybe_set("secure", secure) maybe_set("httponly", httponly) self.headers.append("Set-Cookie", m.OutputString())