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