<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
cookie
是指某些網站為了辨別使用者身份而儲存在使用者本地終端(Client Side)上的資料(通常經過加密)。由網景公司的前僱員盧·蒙特利在1993年3月發明。
Cookie
儲存在使用者端中,按在使用者端中的儲存位置,可分為記憶體Cookie
和硬碟Cookie
。
因為HTTP
協定是無狀態的,即伺服器不知道使用者上一次做了什麼,這嚴重阻礙了互動式Web應用程式(購物網站)的實現。在典型的網上購物場景中,使用者瀏覽了幾個頁面,買了一些東西。最後結帳時,由於HTTP
的無狀態性,不通過額外的手段,伺服器並不知道使用者到底買了什麼,所以Cookie
就是用來繞開HTTP
的無狀態性的“額外手段”之一。伺服器可以設定或讀取Cookie
中包含的資訊,藉此維護使用者跟伺服器對談中的狀態。
cookie
除了能記錄之前歷史的功能外還可以用於識別使用者身份。
對談(session):對談是一種持久的網路協定,用於完成伺服器和使用者端之間的一些互動行為。對談是一個比連線粒度更大的概念,一次對談可能包含多次連線,每次連線都被認為是對談的一次操作。
在Web中,Session
是指一個使用者與網站伺服器進行一系列互動的持續時間,通常指從註冊進入系統到登出退出系統之間所經過的時間,以及在這段時間內進行的操作,還有,伺服器端為儲存使用者狀態開闢的儲存空間。
Cookie以文字檔案格式儲存在瀏覽器中,而session儲存在伺服器端。
cookie的儲存限制了資料量,只允許4KB,而session是無限制的。
cookie包含在每一個使用者端請求報文中,因此容易被人捕獲。
cookie和session都可以設定過期時間
HTML
程式碼:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="/static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script> <script src="/static/bootstrap-3.4.1-dist/js/jquery-3.6.0.min.js"></script> <link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css" rel="external nofollow" rel="external nofollow" > </head> <body> <p> <h1>Set Cookie OK</h1> </p> </body> </html>
views.py
程式碼
from django.shortcuts import render, HttpResponse def set_cookie(request): """ 先設定 """ # cookie_obj = HttpResponse("set cookie OK") cookie_obj = render(request, "setCookie.html") """ 設定cookie """ cookie_obj.set_cookie("Name", "Hello") cookie_obj.set_cookie("is_cookis", True) return cookie_obj
urls.py
程式碼
from django.contrib import admin from django.urls import path from appName import views
views.py
from django.shortcuts import render, HttpResponse def get_cookie(request): cookie_obj = render(request, "getCookie.html") print(request.COOKIES.get("Name")) print(request.COOKIES.get("is_cookis")) return cookie_obj #結果: Hello True # request.COOKIES.get(Key) 獲取cookie
views.py
from django.shortcuts import render, HttpResponse def del_cookie(request): cookie_obj = HttpResponse("Delete cookie OK") # 把cookis "is_cookis" 刪除 cookie_obj.delete_cookie("is_cookis") return cookie_obj # 執行結果: Hello None
測試流程:
1. 先存取 set_cookie設定cookie
2. 存取 get_cookie獲取cookie:Name:Hello和"is_cookis", True
3. 存取 del_cookie 刪除is_cookis
4. 最後再存取 get_cookie 獲取cookie, 發現只有Name Hello,is_cookis的值為:None
cookie的過期時間,如果不寫,關閉瀏覽器,cookie就失效了
obj.set_cookie('key','value')
也可以設定過期時間:
obj.set_cookie('key','value',expires=10)
設定10s過期
對cookie進行加鹽
obj.set_signed_cookie('nb','yes','123',expires=1000)
獲取加鹽的cookie
nb=request.get_signed_cookie('nb',salt='123')
key, 鍵 value='', 值 max_age=None, 超時時間 cookie需要延續的時間(以秒為單位)如果引數是 None`` ,這個cookie會延續到瀏覽器關閉為止 expires=None, 超時時間(IE requires expires, so set it if hasn't been already.) path='/‘, Cookie生效的路徑,/ 表示根路徑,特殊的:根路徑的cookie可以被任何url的頁面存取,瀏覽器只會把cookie回傳給帶有該路徑的頁面,這樣可以避免將cookie傳給站點中的其他的應用。 domain=None, Cookie生效的域名 你可用這個引數來構造一個跨站cookie。如, domain=」.example.com」所構造的cookie對下面這些站點都是可讀的:www.example.com 、 www2.example.com 和an.other.sub.domain.example.com 。如果該引數設定為 None ,cookie只能由設定它的站點讀取 secure=False, 瀏覽器將通過HTTPS來回傳cookie httponly=False 只能http協定傳輸,無法被JavaScript獲取(不是絕對,底層抓包可以獲取到也可以被覆蓋)
搭建一個簡單的網站,必須要登入才可以存取。
HTML
程式碼:
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p>歡迎使用者:{{ name }} 登入:</p> <p> 只有登入才能看到。 </p> <form action="/delete/" method="post"> <input type="submit" value="退出"> </form> </body> </html>
login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="/static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script> <script src="/static/bootstrap-3.4.1-dist/js/jquery-3.6.0.min.js"></script> <link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css" rel="external nofollow" rel="external nofollow" > </head> <body> <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <form action="" method="post"> UserName:<input type="text" name="Name"> PassWord:<input type="password" name="PassWord"> <input type="submit" value="提交"> </form> </div> </div> </div> </body> </html>
delete.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <body> <div> <p>請先<a href="/login/" rel="external nofollow" >登入</a></p> </div> </body> </html>
後端程式碼:
views.py
程式碼
from django.shortcuts import render, HttpResponse, redirect def login(request): if request.method == "POST": name = request.POST.get("Name") password = request.POST.get("PassWord") print(name, password) # 模擬資料庫校驗密碼 if name == "Hans" and password == "123": request.session["name"] = name # 設定session request.session['is_login'] = True return redirect("/index/") else: return render(request, "login.html") def index(request): is_login = request.session.get("is_login") name = request.session.get("name") print("獲取到name", name) # 更新session request.session['name'] = "HELLO" # 更新session # 重新獲取name name = request.session.get("name") if is_login: return render(request, "index.html", locals()) else: return redirect("/login/") def delete(request): name = request.session.get("name") if request.method == "POST": del request.session['is_login'] # 刪除session del request.session['name'] # request.session.flush() # 清空cookie和session return HttpResponse("%s 已經退出" % name) return render(request, "delete.html") #刪除cookie del request.session['name'] # 刪除某一個session request.session.delete() # 刪除資料庫裡的session request.session.flush() # cookie和資料庫都刪
路由urls.py
from django.contrib import admin from django.urls import path from appName import views urlpatterns = [ path('admin/', admin.site.urls), path('index/', views.index), path('login/', views.login), path('delete/', views.delete), ]
設定Session資料 request.session.setdefault('k1',123) # 存在則不設定 # 所有 鍵、值、鍵值對 request.session.keys() request.session.values() request.session.items() request.session.iterkeys() request.session.itervalues() request.session.iteritems() # 對談session的key(隨機字串) request.session.session_key # 將所有Session失效日期小於當前日期的資料刪除 request.session.clear_expired() # 檢查對談session的key在資料庫中是否存在 request.session.exists("session_key") # 刪除當前對談的所有Session資料(只刪資料庫) request.session.delete() # 刪除當前的對談資料並刪除對談的Cookie(資料庫和cookie都刪) request.session.flush() 這用於確保前面的對談資料不可以再次被使用者的瀏覽器存取 # 設定對談Session和Cookie的超時時間 request.session.set_expiry(value) * 如果value是個整數,session會在些秒數後失效。 * 如果value是個datatime或timedelta,session就會在這個時間後失效。 * 如果value是0,使用者關閉瀏覽器session就會失效。 * 如果value是None,session會依賴全域性session失效策略。
1. 資料庫Session SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(預設) 2. 快取Session SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎 SESSION_CACHE_ALIAS = 'default' # 使用的快取別名(預設記憶體快取,也可以是memcache),此處別名依賴快取的設定 3. 檔案Session SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎 SESSION_FILE_PATH = None # 快取檔案路徑,如果為None,則使用tempfile模組獲取一個臨時地址tempfile.gettempdir() 4. 快取+資料庫 SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎 5. 加密Cookie Session SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎 其他公用設定項: SESSION_COOKIE_NAME = "sessionid" # Session的cookie儲存在瀏覽器上時的key,即:sessionid=隨機字串(預設) SESSION_COOKIE_PATH = "/" # Session的cookie儲存的路徑(預設) SESSION_COOKIE_DOMAIN = None # Session的cookie儲存的域名(預設) SESSION_COOKIE_SECURE = False # 是否Https傳輸cookie(預設) SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支援http傳輸(預設) SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2 # Session的cookie失效日期(2周)(預設) SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關閉瀏覽器使得Session過期(預設) SESSION_SAVE_EVERY_REQUEST = False # 是否每次請求都儲存Session,預設修改之後才儲存(預設)
以上就是Django框架cookie和session簡介及引數設定的詳細內容,更多關於Django框架cookie和session的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45