Python USES a cookie library operation to save cookie details

  • 2020-04-02 13:28:57
  • OfStack

Cookies are used for server session, user login and related functions for state management. To install cookies on the user's browser, the HTTP server adds an HTTP header to the HTTP response that looks like the following:


Set-Cookie : session=8345234;expires=Sun . 15-Nov-2013 15:00:00 GMT ; path=/ ; domain=baidu.com

Expires is the lifetime of a cookie, path is the valid path to a cookie, and domain is the valid domain of a cookie.

The "path" is used to set the top-level directory where a cookie can be read. Setting the path of the cookie to the top-level directory of your page makes it accessible to all pages in that directory.

Method: add path=/ to your cookie; If you want to make the cookie available only to web pages in the "food" directory, you add path=/food.

Domain: some websites have many small domains. For example, baidu may also have pages under the domains "news.baidu.com", "zhidao.baidu.com" and "v.baidu.com". If you want all machines under "baidu.com" to read the cookie, you must add "domain=.baidu.com" in the cookie.

The user's browser will store cookies until they expire, and the browser will send the following HTTP request headers to the path and domain servers:

Cookie: session = 8345234.

For example, when logging on www.baidu.com, the cookie in the HTTP response header sent back by baidu server is:


Set-Cookie:H_PS_PSSID=4681_4567_1452_9876_4759; path=/; domain=.baidu.com
Set-Cookie:BDSVRTM=74; path=/  

The browser's HTTP request header:


Cookie:BAIDUID=0FD996SDFG12********107B9C227F4C:FG=1; locale=zh; bdshare_firstime=1384567418140; NBID=D830DD2345HH2818A9F4134E5A2D778D3B:FG=1; H_PS_LC=4_shadu2014; BD_CK_SAM=1; H_PS_PSSID=4681_4567_1452_9876_4759

When the browser sends the cookie back to the HTTP server, it USES the encoded form of key=value string and does not return optional properties such as expires, path, and domain.

The cookie string is usually in the HTTP_COOKIE environment variable and can be read as follows:


import os
print "Content-type: text/plainn"
if "HTTP_COOKIE" in os.environ:
    print os.environ["HTTP_COOKIE"]
else:
    print "HTTP_COOKIE not set!"


The Cookie module in Python (http.cookies in Python 3) provides a special dictionary-like object called a SimpleCookie that stores and manages a collection of Cookie values called Morsel.

Each Morsel has name, value, and optional properties (expires, path, domain, comment, max-age, secure, version, httponly).

The SimpleCookie can use the output() method to create an output of cookie data in the form of an HTTP header, and the js_output() method to generate a string containing javascript code.

Generate cookies with HTTP_COOKIE:


cookie=Cookie.SimpleCookie(os.environ['HTTP_COOKIE'])
print cookie.output()

The set cookies:


import Cookie
import datetime
import random

expiration = datetime.datetime.now() + datetime.timedelta(days=30)
cookie = Cookie.SimpleCookie()
cookie["session"] = random.randint(1,1000000000)
cookie["session"]["domain"] = ".baidu.com"
cookie["session"]["path"] = "/"
cookie["session"]["expires"] = expiration.strftime("%a, %d-%b-%Y %H:%M:%S PST")

print "Content-type: text/plain"
print cookie.output()
print
print "Cookie set with: " + cookie.output()

Output:


Content-type: text/plain
Set-Cookie: session=155209565; Domain=.jayconrod.com; expires=Mon, 03-Mar-2014 07:42:47 PST; Path=/
Cookie set with: Set-Cookie: session=155209565; Domain=.jayconrod.com; expires=Mon, 03-Mar-2014 07:42:47 PST; Path=/


Related articles: