自定义session,cookie

第一种情况:没有设置缓存:执行相对应的setitem等方法进行,保存到字典里面

cookies_dic={}
print(cookies_dic)
class Session():
def __init__(self,handler):
self.user_id=None
self.handler=handler###这个handler是传过来的requetys对象,注明一下,这个handler是request对象

##接受到传过来的参数
recv_user_id=self.handler.get_cookie('session_id')#去当前的requets对象里面拿到这个session_id
print('查看是否存在这个session_id',recv_user_id)
#进行判断看是否是存在着的用户,非法的用户
if not recv_user_id :
##不存在的话,就是新用户
self.user_id=self.create_random_str()
cookies_dic[self.user_id]={}
else:
##判断是否是非法的用户,存在user_id,单数不在cookies_dic里面可以找的得到
if recv_user_id not in cookies_dic:
print('非法用户')
self.user_id=self.create_random_str()
cookies_dic[self.user_id]={}
else:
print('正常')
print('查看是否存在这个session_id', recv_user_id)

self.user_id=self.create_random_str()
import time
ctime=time.time()
self.handler.set_cookie('session_id',self.user_id,expires=ctime+3600)#设置cookies
##设置超时时间为30乘以60秒,就是30分钟

def create_random_str(self):
import hashlib
m=hashlib.md5()

m.update(bytes(str(self.user_id),encoding='utf-8'))

return m.hexdigest()

def __setitem__(self, key, value):
##注意一下,这个handler是reqeuts对象,对cookie_dic进行设置
print('进行设置setitem')
print('这个key是',key)
print('value',value)
cookies_dic[self.user_id][key]=value######self是reqeust对象


def __getitem__(self, key):
return cookies_dic[self.user_id][key]


class FOO():
def initialize(self):
print('执行FOO函数')
self.session=Session(self)##传入参数进去,requets
# super(FOO,self).initialize()


class HomeHandler(FOO,tornado.web.RequestHandler):
def get(self, *args, **kwargs):
print(self.session['user'])
print('进入到home页面')
self.write('home')

扫描二维码关注公众号,回复: 4219892 查看本文章


class Login(FOO,tornado.web.RequestHandler):
def get(self, *args, **kwargs):
self.session['user']='yunxin'##当进行这个操作的时候,会进行setitem操作,key和vakue
self.session['status']='is_true'

self.redirect('/home')


import tornado.ioloop

application=tornado.web.Application([
(r'/login',Login),
(r'/home', HomeHandler),
])


application.listen(8000)
tornado.ioloop.IOLoop.instance().start()

第二种情况:可以设置缓存,比如redis,或者是memcache等,保存起来

'''
requets里面封装了cookie,还有session,requets.session,requets[session]
requets.set_cookie('sessioin_id','xxxxxxx',expire=60秒*多少)
requets.get_cookie('session_id')
'''
import tornado.web
import redis##可以保存进redis里面就进行缓存
class Cache():
def __init__(self):
self.container={}
# redis.Redis(host=)
def __contains__(self, item):###传过来的item是coookied_id,判断这个用户是否存在,如果存在的话,就返回true,到下面就是false
#判断
if item in self.container:
return True
else:
return False








def set(self,cookie_id,key,value):
self.container[cookie_id]={}
self.container[cookie_id][key]=value
def delete(self,cookie_id,key):
del self.container[cookie_id][key]
def clear(self,cookie_id):
'''
清除整个用户的cookies记录
:return:
'''
del self.container[cookie_id]

def open(self,cookie_id):##cookies_di就是session_id,随机字符串
self.container[cookie_id]={}



class Session():
def __init__(self,handler):
self.user_id=None
self.handler=handler###这个handler是传过来的requetys对象,注明一下,这个handler是request对象
self.start_base=Cache()
self.db=Cache()##拿到数据库

##接受到传过来的参数
recv_user_id=self.handler.get_cookie('session_id')#去当前的requets对象里面拿到这个session_id
print('查看是否存在这个session_id',recv_user_id)
#进行判断看是否是存在着的用户,非法的用户
if not recv_user_id :
##不存在的话,就是新用户
self.user_id=self.create_random_str()
self[self.user_id]={}
else:
##判断是否是非法的用户,存在user_id,单数不在cookies_dic里面可以找的得到
if recv_user_id in self.start_base:
print('正常')
print('查看是否存在这个session_id', recv_user_id)
self.user_id = self.create_random_str()
else:
print('非法用户')
self.user_id = self.create_random_str()
# cookies_dic[self.user_id]={}
self.start_base.open(self.user_id) ##设置cookies值,存入数据库里面
# if self.start.initie(self.user_id) in

############将cookies保存进creqeust.ccokies里面
import time
ctime=time.time()
self.handler.set_cookie('session_id',self.user_id,expires=ctime+3600)#设置cookies,设置进request里面
##设置超时时间为30乘以60秒,就是30分钟

def create_random_str(self):
import hashlib
m=hashlib.md5()

m.update(bytes(str(self.user_id),encoding='utf-8'))

return m.hexdigest()

def __setitem__(self, key, value):
##注意一下,这个handler是reqeuts对象,对cookie_dic进行设置
print('进行设置setitem')
print('这个key是',key)
print('value',value)
# cookies_dic[self.user_id][key]=value######self是reqeust对象
self.start_base.set(self.user_id,key,value)##self.user_id就是session_id,保存进来
'''
{随机字符串:{
key:value,}
随机字符串:{
key:value, key:value, key:value}
'''

def __getitem__(self, key):
# return cookies_dic[self.user_id][key]
return self.start_base.get(key)

def __delitem__(self, key):
self.start_base.delete(self.user_id,key)
def clear(self):
self.start_base.clear(self.user_id)

class FOO():
def initialize(self):
print('执行FOO函数')
self.session=Session(self)##传入参数进去,requets
# super(FOO,self).initialize()


class HomeHandler(FOO,tornado.web.RequestHandler):
def get(self, *args, **kwargs):
print(self.session['user'])
print('进入到home页面')
self.write('home')


class Login(FOO,tornado.web.RequestHandler):
def get(self, *args, **kwargs):
self.session['user']='yunxin'##当进行这个操作的时候,会进行setitem操作,key和vakue
self.session['status']='is_true'

self.redirect('/home')


import tornado.ioloop

application=tornado.web.Application([
(r'/login',Login),
(r'/home', HomeHandler),
])


application.listen(8000)
tornado.ioloop.IOLoop.instance().start()



'''
最开始设置的是session_id,保存进request.session字典里面
之后判断是否存在这个session_id,在cookies里面进行判断,self.handler.get_cookie('session_id')
如果不存在的话,就是新用户>>self.handler[session_id]={}
否则的话就进行判断是否是正常的用户
如果是非法的话,就进行重新设置cookie_id(也就是传过来的session_id),self.handler[session_id]={}
如果是正常的话,就进行往下面执行>>不用设置
self.handler.set_cookie['session_id','xxxx',expire=60秒*多少)

最后设置session_id到cookie数据库里面,self.handler[session_id][key]=value,执行对应的setitem,delitem等方法
'''

猜你喜欢

转载自www.cnblogs.com/yunxintryyoubest/p/10014935.html
今日推荐