示例:博客系統javascript
基本實現用戶登陸html
用戶未登陸就不能訪問指定頁面java
後端操做cookiepython
清除chrome瀏覽器頁面緩存和cookie:Ctrl + Shift + deljquery
獲取Cookieweb
request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None) # 參數: # default: 默認值 # salt: 加密鹽 # max_age: 後臺控制過時時間
設置Cookieredis
rep = HttpResponse(...) rep = render(request, ...) rep.set_cookie(key,value,...) rep.set_signed_cookie(key,value,salt='加密鹽', max_age=None, ...) # 參數: # key, 鍵 # value='', 值 # max_age=None, 超時時間 # expires=None, 超時時間,值是一個datetime類型的時間日期對象,到這個日期就失效的意思 # path='/', Cookie生效的路徑,/ 表示根路徑,特殊的:根路徑的cookie能夠被任何url的頁面訪問 # domain=None, Cookie生效的域名 # secure=False, https傳輸 # httponly=False 只能http協議傳輸,沒法被JavaScript獲取(不是絕對,底層抓包能夠獲取到也能夠被覆蓋)
刪除Cookiechrome
def logout(request): rep = redirect("/login/") rep.delete_cookie("user") # 刪除用戶瀏覽器上以前設置的usercookie值 return rep
代碼示例數據庫
def login(request): # return HttpResponse('...') # return render('...') # return redirect('...') # 設置cookie data = redirect('...') data.set_cookie() # 讀取cookie request.COOKIES.get('xx') return data # 三個參數: key, value='', max_age=None
jquery操做cookiedjango
操做cookie前準備
1.定義:讓網站服務器把少許數據儲存到客戶端的硬盤或內存,從客戶端的硬盤讀取數據的一種技術; 2.下載與引入:jquery.cookie.js基於jquery;先引入jquery,再引入:jquery.cookie.js;下載:http://plugins.jquery.com/cookie/ 3.<script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript" src="js/jquery.cookie.js"></script>
添加cookie
// 1.添加一個"會話cookie" $.cookie('the_cookie', 'the_value'); //這裏沒有指明 cookie有效時間,所建立的cookie有效期默認到用戶關閉瀏覽器爲止,因此被稱爲 「會話cookie(session cookie)」。 // 2.建立一個cookie並設置有效時間爲 7天 $.cookie('the_cookie', 'the_value', { expires: 7 }); //這裏指明瞭cookie有效時間,所建立的cookie被稱爲「持久 cookie (persistent cookie)」。注意單位是:天; // 3.建立一個cookie並設置 cookie的有效路徑 $.cookie('the_cookie', 'the_value', { expires: 7, path: '/' }); //在默認狀況下,只有設置 cookie的網頁才能讀取該 cookie。若是想讓一個頁面讀取另外一個頁面設置的cookie,必須設置cookie的路徑。cookie的路徑用於設置可以讀取 cookie的頂級目錄。將這個路徑設置爲網站的根目錄,可讓全部網頁都能互相讀取 cookie (通常不要這樣設置,防止出現衝突)。
讀取cookie
$.cookie('the_cookie');
刪除cookie
$.cookie('the_cookie', null); //經過傳遞null做爲cookie的值便可
可選參數
$.cookie('the_cookie','the_value',{ expires:7, path:'/', domain:'jquery.com', secure:true }) // expires:(Number|Date)有效期;設置一個整數時,單位是天;也能夠設置一個日期對象做爲Cookie的過時日期; // path:(String)建立該Cookie的頁面路徑; // domain:(String)建立該Cookie的頁面域名; // secure:(Booblean)若是設爲true,那麼此Cookie的傳輸會要求一個安全協議,例如:HTTPS;
注意點
// js操做 document.cookie = 'k1=liu;path=/' // jquery操做 $.cookie('k1','liu',{path:'/'}) // 注意:path不一樣會致使設置不一樣. //path的做用 // / , 當前網站中全部的URL都能讀取到此值. // "",只能在當前頁面訪問的到此數據. // /index/ ,只能在/index/xxx 的網頁中查看. // 在瀏覽器操做cookie是路徑path不寫默認是""
基於session實現保留會話信息 / 推薦
什麼是session
依賴cookie 是一種存儲數據的方式,依賴於cookie,實現本質: 用戶向服務端發送請求,服務端作兩件事: 1.生成隨機字符串; 2.爲此用戶開闢一個獨立的空間來存放當前用戶獨有的值. 在空間中如何想要設置值: request.session['x1'] = 123 request.session['x2'] = 456 在空間中取值: request.session['x2'] request.session.get('x2') 視圖函數中的業務操做處理完畢,給用戶響應,在響應時會將隨機字符串存儲到用戶瀏覽器的cookie中.
cookie和session的區別
答: cookie是存儲在客戶端瀏覽器上的鍵值對,發送請求時瀏覽器會自動攜帶. session是一種存儲數據方式,基於cookie 實現,將數據存儲在服務端(django默認存儲到數據庫).其本質是: 用戶向服務端發送請求,服務端作兩件事:生成隨機字符串;爲此用戶開闢一個獨立的空間來存放當前用戶獨有的值. 在空間中如何想要設置值: request.session['x1'] = 123 request.session['x2'] = 456 在空間中取值: request.session['x2'] request.session.get('x2') 視圖函數中的業務操做處理完畢,給用戶響應,在響應時會 將隨機字符串存儲到用戶瀏覽器的cookie中.
django中session相關的配置 / 拓展
1.SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在瀏覽器上時的key,即: sessionid=隨機字符串 2.SESSION_COOKIE_DOMAIN = None # api.baidu.com /www.baidu.com/ xxx.baidu.com 3.SESSION_COOKIE_PATH = "/" # Session的cookie 保存的路徑 4.SESSION_COOKIE_HTTPONLY = True # 是否 Session的cookie只支持http傳輸,js獲取不到 5.SESSION_COOKIE_AGE = 1209600 # Session的 cookie失效日期(2周) 6.SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關閉瀏覽器使得Session過時 7.SESSION_SAVE_EVERY_REQUEST = False # 是否每次請求都保存Session,默認修改以後才保存 # django中的session如何設置過時時間? SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)
django的session默認存儲在數據庫,能夠放在其餘地方嗎
SESSION_ENGINE = 'django.contrib.sessions.backends.file' SESSION_FILE_PATH = '/sessiondata/'
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' SESSION_CACHE_ALIAS = 'default' CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMem Cache', 'LOCATION': 'unique-snowflake', } }
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' SESSION_CACHE_ALIAS = 'default' CACHES = { default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100} # "PASSWORD": "密碼", } } }
操做session
# 設置(添加&修改) request.session['x1'] = 123 request.session['x2'] = 456 # 讀取 request.session['xx'] request.session.get('xx') # 刪除 del request.session['xx'] # 刪除當前會話的全部Session數據 request.session.delete() # 刪除cookie以及session request.session.flush()
request.session.keys() request.session.values() request.session.items() request.session.session_key # 獲取sessionid的值 request.session.set_expiry(value) # 設置會話Session和Cookie的超時時間 # 若是value是個整數,session會在些秒數後失效。 # 若是value是個datatime或timedelta,session就會在這個時間後失效。 # 若是value是0,用戶關閉瀏覽器session就會失效。 # 若是value是None,session會依賴全局session失效策略。
cookie/session的應用場景
session中的數據是根據用戶相互隔離.
# 示例 def login(request): # 獲取用戶提交的用戶名和密碼 user = request.POST.get('user') request.session['user_name'] = user def index(request): print(request.session['user_name'])
cookie代碼示例
from django.shortcuts import render,redirect from app01 import models def login(request): """ 用戶登陸 :param request: :return: """ if request.method == 'GET': return render(request, 'login.html') # 獲取用戶提交的用戶名和密碼 user = request.POST.get('user') pwd = request.POST.get('pwd') # 去數據庫檢查用戶名密碼是否正確的兩種方式 # user_object = models.UserInfo.objects.filter(username=user,password=pwd).first() # user_object = models.UserInfo.objects.filter(username=user, password=pwd).exists() user_object = models.UserInfo.objects.filter(username=user, password=pwd).first() if user_object: # 用戶登陸成功 result = redirect('/index/') result.set_cookie('xxxxxxxx',user) return result # 用戶名或密碼輸入錯誤 return render(request,'login.html',{'error':'用戶名或密碼錯誤'}) def index(request): """ 博客後臺首頁 :param request: :return: """ user = request.COOKIES.get('xxxxxxxx') if not user: return redirect('/login/') return render(request,'index.html',{'user':user})
session代碼示例
from django.shortcuts import render,redirect from app01 import models def login(request): ''' 用戶登錄 :param request: :return: ''' if request.method == 'GET': return render(request,'login.html') user = request.POST.get('username') pwd = request.POST.get('password') ret = models.UserInfo.objects.filter(username=user,password=pwd).first() if ret: request.session['user_name'] = ret.username return redirect('/index/') return render(request,'login.html',{'error':'用戶名或密碼錯誤'}) #構建裝飾器 import functools def auth(f): @functools.wraps(f) def inner(request,*args,**kwargs): user = request.session.get('user_name') if not user: return redirect('/login/') return f(request,*args,**kwargs) return inner @auth def index(request): ''' 博客後臺首頁 :param request: :return: ''' return render(request,'index.html')