cookies与session
生活随笔
收集整理的這篇文章主要介紹了
cookies与session
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、cookies
-
本質:瀏覽器端保存的鍵值對
-
方便客戶按照自己的習慣操作頁面或軟件,例如:用戶驗證,登陸界面,右側菜單隱藏,控制頁面列表顯示條數...
-
cookies是由服務端寫在瀏覽器端,以后每次請求的時候,瀏覽器都攜帶者cookie來訪問
?
cookie的設置方式
-
tronado(后臺設置)
-
前端js設置
?
基本操作
后臺設置
import tornado.ioloop import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self, *args, **kwargs):print(self.cookies)print(self.get_cookie('k1'))self.set_cookie('k2', '999')self.render('index.html')settings = {'template_path':'views', }application = tornado.web.Application([(r"/index", MainHandler), ],**settings)if __name__ == "__main__":application.listen(8888)tornado.ioloop.IOLoop.instance().start()?
前端設置
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><script>function setCookieBySeconds(name, value, expires) {var current_date = new Date();current_date.setDate(current_date.getSeconds()+expires);document.cookie = name + '= ' + value +';expires=' + current_date.toUTCString();}function setCookieByDays(name, value, expires) {var current_date = new Date();current_date.setDate(current_date.getDate()+expires);document.cookie = name + '= ' + value +';expires=' + current_date.toUTCString();}//此外還可以導入jquery.cookie.js后通過// $.cookie('k1','v1',{expires:7});設置過期時間為7天 </script> </body> </html>?
加密cookie(簽名)
cookie很容易被惡意的客戶端偽造,加入你想在cookie中保存當前登陸用戶的id之類的信息,你需要對cookie做簽名以防止偽造,Tornado通過set_secure_cookie和get_secure_cookie方法直接支持了這種功能,要使用這些方法,你需要在創建應用一個密鑰,名字為cookie_secret(在settings配置cookie_secret)
簽名Cookie的本質是:
寫cookie過程:
- 將值進行base64加密
- 對除值以外的內容進行簽名,哈希算法(無法逆向解析)
- 拼接 簽名 + 加密值
讀cookie過程:
- 讀取 簽名 + 加密值
- 對簽名進行驗證
- base64解密,獲取值內容
?
二、session
-
cookie保存單一鍵值對,session保存多個鍵值對
-
cookie是保存在客戶端上,session是保存在服務端
-
session是基于cookie人為構建的
-
session在服務端存儲類似于字典樣式的結構,可以存在全局變量,數據庫,文件,memcached radis,但是不能放在局部變量里
?
1、面向對象基礎
-
面向對象中通過索引的方式訪問對象,需要內部實現__getitem__、__delitem__、__setitem__方法
?
2、Tornado擴展
- Tornado框架中,默認執行Handler的get/post等方法之前默認會執行initialize方法,所以可以通過自定義的方式使得所有請求在處理前執行操作..
?
3、自定義session
import tornado.ioloop import tornado.web from hashlib import sha1 import os, time#將session以全局變量的形式保存 session_container = {}#創建cookie_str隨機字符串 的函數 create_session_id = lambda: sha1('%s%s' % (os.urandom(16), time.time())).hexdigest()class Session(object):#靜態字段--session key名session_id = "__sessionId__"def __init__(self, request):#嘗試獲取__sessionId__session_value = request.get_cookie(Session.session_id)if not session_value:#獲取失敗,就創建隨機字符串self._id = create_session_id()else:#成功---拿值self._id = session_value#最后設置cookie---"__sessionId__:隨機字符串"request.set_cookie(Session.session_id, self._id)def __getitem__(self, key):return session_container[self._id][key]def __setitem__(self, key, value):if session_container.has_key(self._id):session_container[self._id][key] = valueelse:session_container[self._id] = {key: value}def __delitem__(self, key):del session_container[self._id][key]class BaseHandler(tornado.web.RequestHandler):def initialize(self):# my_session['k1']訪問 __getitem__ 方法#實例session對象,實現索引訪問self.my_session = Session(self)class MainHandler(BaseHandler):def get(self):print(self.my_session['c_user'])print(self.my_session['c_card'])self.write('index')class LoginHandler(BaseHandler):def get(self):self.render('login.html', **{'status': ''})def post(self, *args, **kwargs):username = self.get_argument('name')password = self.get_argument('pwd')if username == 'wupeiqi' and password == '123':self.my_session['c_user'] = 'wupeiqi'self.my_session['c_card'] = '12312312309823012'self.redirect('/index')else:self.render('login.html', **{'status': '用戶名或密碼錯誤'})settings = {'template_path': 'views','static_path': 'static','static_url_prefix': '/static/','cookie_secret': 'aiuasdhflashjdfoiuashdfiuh','login_url': '/login' }application = tornado.web.Application([(r"/index", MainHandler),(r"/login", LoginHandler), ], **settings)if __name__ == "__main__":application.listen(8888)tornado.ioloop.IOLoop.instance().start()?
轉載于:https://www.cnblogs.com/xinsiwei18/p/5836381.html
總結
以上是生活随笔為你收集整理的cookies与session的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Bitmap文件格式+生成一个BMP文件
- 下一篇: Web中常用字体介绍(转)