关于Cookie和Session

 

简单的说

  • Cookie是保存在浏览器的键值对
  • Session是保存在服务端的键值对
  • Session是依赖于Cookie的

在Django框架中,我们可以直接操作cookie和session,但是tornado只支持cookie,那如果要使用session怎么办呢?自己定义session

基于内存实现SESSION

我们知道,在tornado中,所有的请求都是由RequestHandler对象来处理(以下简称handler对象)。在RequestHandler源码中,预留了一个钩子方法initialize,该方法会在实例化Handler对象时执行。因此,如果我们继承RequestHandler类并重写initialize,就可以完成一些自定义操作。  

复制代码
import os import tornado.ioloop import tornado.web from tornado.web import RequestHandler import hashlib import time # 生成一个随机的字符串def gen_random_str():     md5 = hashlib.md5()     md5.update(str(time.time()).encode('utf-8'))     return md5.hexdigest() class CacheSession(object):     container = {}     def __init__(self,handler):         self.handler = handler         client_random_str = self.handler.get_cookie("_session_id_")         if client_random_str and client_random_str in self.container:             self.random_str = client_random_str         else:             self.random_str = gen_random_str()             self.container[self.random_str] = {}         expires = time.time() + 300         self.handler.set_cookie("_session_id_", self.random_str, expires=expires)     def __setitem__(self, key, value):         self.container[self.random_str][key] = value     def __getitem__(self, item):         return self.container[self.random_str].get(item) class SessionHandler(RequestHandler):     def initialize(self):         # self指代的是当前的对象         self.session = CacheSession(self) class LoginHandler(SessionHandler,RequestHandler):     def get(self, *args, **kwargs):         self.render('login.html')     def post(self, *args, **kwargs):         username = self.get_argument('username')         password = self.get_argument('password')         
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信