django中的session实现

2020-07-06 00:00:00 用户 客户端 请求 信息 响应

Cookie

要理解session,首先要搞清cookie的概念。由于http是无状态的,服务器不能“记住”用户的信息状态,因此若同一个客户端发起的多条请求,服务器不能辨别这些请求来自哪个用户,http无状态的限制为web应用程序的设计带来了许多不便,购物网站中的“购物车”功能就是一个很好的例子,当用户把商品放进购物车后,客户端必须要保存购物车的状态,否则当用户下次浏览网站时,购物车拥有的商品状态便不复存在。客户端和服务器必须有通信的媒介,方便服务器追踪客户端的状态,于是Cookie技术应运而生,cookie是服务器产生的一段随机的字符串,发送给客户端,随后客户端便保存cookie,并使用这个cookie附带进后续的请求。以下是cookie设置的详细流程:

  1. 客户端发起一个请求连接(如HTTP GET)。
  2. 服务器在http响应头上加上Set-Cookie,里面存放字符串的键值对。
  3. 客户端随后的http请求头加上Cookie首部,它包含了之前服务器响应中设置cookie的信息。

根据这个Cookie首部的信息,服务器便能“记住”当前用户的信息。

再来看看在Python中是如何设置Cookie的:

from BaseHTTPServer import HTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
import Cookie

class MyRequestHandler(SimpleHTTPRequestHandler):
    def do_GET(self):
        content = "<html><body>Path is: %s</body></html>" % self.path
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.send_header('Content-length', str(len(content)))

        cookie = Cookie.SimpleCookie()
        cookie['id'] = 'some_value_42'

        self.wfile.write(cookie.output())
        self.wfile.write('\r\n')

        self.end_headers()
        self.wfile.write(content)

server = HTTPServer(('', 59900), MyRequestHandler)
server.serve_forever()

相关文章