參考:https://www.cnblogs.com/sunshuhai/articles/6253815.htmljavascript
1、cookie用法補充html
一、cookie的應用場景java
瀏覽器端保存的鍵值對,每次訪問都會攜帶python
1)用戶驗證,多長時間內免登錄jquery
2)後臺管理,左側隱藏,能夠把隱藏的鍵值對保存在cookie中web
3)每頁顯示多少條數據也能夠保存在cookie中瀏覽器
設置cookie的方法:cookie
二、tornado在後臺進行設置session
self.cookies #獲取全部的cookieapp
self.setcookie("k1","999") #設置cookie
self.getcookie("k1") #獲取某個cookie
三、瀏覽器端使用javascript進行設置或獲取
document.cookie //獲取全部cookie,返回的是字符串格式:"k1=9999",若是想獲取k1的值,則經過處理字符串
document.cookie = "k2=666" //設置cookie,增長鍵值對 "k2=666"
//從新獲取下
document.cookie //結果:"k1=9999; k2=666"
document.cookie = "k3=888;paht=/" //表示增長鍵值對"k3=888",而且設置路徑爲全路徑,再次獲取時path是獲取不到的,path表示參數設置
<script> //設置cookie並設置超時時間 function setCookie(name,value,expires) { //獲取當前的時間 var current_date = new Date(); //當前時間的基礎上+5秒 current_date.setSeconds(current_date.getSeconds() + expires) //當前時間的基礎上+5天 //current_date.setDate(current_date.getDate() + expires) //設置cookie,而且設置超時時間爲當前時間+5s //document.cookie = "k4=444;expires =" + current_date.toUTCString(); document.cookie = name + "= " + value + ";expires=" + current_date.toUTCString(); } </script>
setCookie("k4","111",10) //增長cookie鍵值對"k4=111" 而且設置10秒鐘後失效
document.cookie = "k5=555;domain=ssh.com" //增長cookie鍵值對"k5=555" 而且設置域名爲 ssh.com
secure https使用
四、瀏覽器Jquery操做cookie的方法
首先使用Jquery中的cookie,先要下載靜態文件jquery文件,而且引入
再次,要下載Jquery制定的插件jQuery Cookie,下載地址,下載完畢後引用該靜態文件
導入Jquery和jQuery Cookie後就可使用了
$cookie("k6","6666") //增長設置cookie鍵值對"k6=666"
$cookie("k7","777",{'path' :' ', 'domain' : '', 'expires' : 7}) //設置cookie ,並設置路徑,域名,超時時間(是按照天數計算)
$cookie("k8","888",{'expires' : 7}) //表示7天后過時
若是想設置爲6秒後過時,代碼以下:
var current_date = new Date();
current_date.second(current_date.getSeconds() + 6);
$.cookie('k1','v1',{'expires' : current_date})
五、tornado帶簽名cookie原理
tornado的加密原理:
k1=v1 把v1作一個base64的加密
v1|v1+時間戳+自定義字符串,而後把v1+時間戳+自定義字符串生成一個加密串
v1|加密串|時間戳
self.set_secure_cookie("k1","v1") #設置帶簽名的cookie
self.get_secure_cookie("k1") #返回的類型爲字節類型
str(self.get_secure_cookie("k1"),encoding="utf-8") == "v1" #判斷獲取的帶前面的值解密後是否等於v1
六、自定義Session
tornado自己是沒有Session功能的,若是使用Session須要自定義Session
其實Session是隨機產生的一個字符串,用戶登陸後隨機產生一個字符串做爲Cookie,後臺隨機產生的Cookie與改用戶的帳戶信息進行關聯,前臺攜帶這個Cookie來登陸時經過這個隨機字符串,來找到帳戶信息,從而返回該用戶的其餘信息。
下面是Session的一個簡單的例子:
#!/usr/bin/env python # -*- coding:utf-8 -*- import tornado.ioloop import tornado.web import hashlib import time container = {} class IndexHandler(tornado.web.RequestHandler): def get(self): ses = str(self.get_cookie("session",None)) if ses in container: self.redirect('/manager') else: if self.get_argument('u',None) in ['alex','eric']: obj = hashlib.md5() bb =bytes(str(time.time()),encoding='utf-8') obj.update(bb) random_str = obj.hexdigest() container[random_str] = {} container[random_str]['account']= self.get_argument('u',None) container[random_str]['islogin']=True self.set_cookie('session',random_str) else: self.write("請登陸") class ManagerHandler(tornado.web.RequestHandler): def get(self): ses = str(self.get_cookie("session",None)) if ses in container: self.write(container[ses]['account'] + '已登陸到管理帳戶') settings = { 'template_path':'views', } #路由映射 application = tornado.web.Application([ (r"/index", IndexHandler), (r'/manager',ManagerHandler), ],**settings) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()
#!/usr/bin/env python # -*- coding:utf-8 -*- import tornado.ioloop import tornado.web container={} class Session: def __init__(self,handler): self.handler = handler self.random_hex = None def __genarate_random_str(self): import hashlib import time obj = hashlib.md5() random_str = bytes(str(time.time()), encoding='utf-8') obj.update(random_str) random_hex = obj.hexdigest() return random_hex #def set_value(self,key,value): def __setitem__(self, key, value): #爲隨機字符串key對應的value字典添加{key,value} if not self.random_hex: random_hex = self.handler.get_cookie("session") if not random_hex: #客戶端沒有隨機字符串,則建立 random_hex = self.__genarate_random_str() container[random_hex] = {} else: #客戶端有隨機字符串,若是不在container內也須要建立 if random_hex not in container: random_hex = self.__genarate_random_str() container[random_hex] = {} self.random_hex = random_hex # container={srandom_hex:{key:value}} container[self.random_hex][key] = value self.handler.set_cookie("session",self.random_hex) #訪問後從新設置cookie,超時時間繼續延長 #def get_value(self,key): def __getitem__(self, key): random_str = self.handler.get_cookie("session", None) #獲取瀏覽器的字符串,而且字符串在container內 if random_str and random_str in container: value = container[random_str].get(key,None) return value else: return None class BaseHandler(tornado.web.RequestHandler): def initialize(self): self.session = Session(self) class IndexHandler(BaseHandler): def get(self): user = self.get_argument('u') if user in ['alex','sunshuhai']: #self.session.set_value('islogin',True) #self.session.set_value('user',user) #第2次沒發請求 self.session['islogin'] = True self.session['user']=user print(container) else: self.write("請登陸!") class ManagerHandler(BaseHandler): def get(self): getValue = self.session["islogin"] if getValue: self.write( '已登陸到管理帳戶') else: self.write('登陸失敗!') settings = { 'template_path':'views', } #路由映射 application = tornado.web.Application([ (r"/index", IndexHandler), (r'/manager',ManagerHandler), ],**settings) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()
v1|加密串|時間戳