ctrl + shift + del 是谷歌瀏覽器中清除頁面緩存和cookie的快捷鍵javascript
語法:html
# 獲得須要返回的的操做 rep = HttpResponse(...) rep = render(request, ...) # 設置cookie rep.set_cookie(key,value,...) # 設置加密cookie rep.set_signed_cookie(key,value,salt='加密鹽', max_age=None, ...) # 參數: key, 鍵 value='', 值 max_age=None, 超時時間 expires=None, 超時時間(IE requires expires, so set it if hasn't been already.) path='/', Cookie生效的路徑,/ 表示根路徑,特殊的:根路徑的cookie能夠被任何url的頁面訪問 domain=None, Cookie生效的域名 secure=False, https傳輸 httponly=False 只能http協議傳輸,沒法被JavaScript獲取(不是絕對,底層抓包能夠獲取到也能夠被覆蓋)
<br/>java
語法:python
# 普通獲取 request.COOKIES['key'] # 獲取加密cookie request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None) # 參數: default: 默認值 salt: 加密鹽 max_age: 後臺控制過時時間
<br/>數據庫
request.COOKIES["KEY"] # 直接獲取cookie的方法 request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None) # 獲取加密cookie的方式 def logout(request): rep = redirect("/login/") rep.delete_cookie("user") # 刪除用戶瀏覽器上以前設置的usercookie值 return rep
jQuery中操做cookiedjango
$.cookie('the_cookie', 'the_value'); // 添加一個"會話cookie $.cookie('the_cookie'); //讀取cookie $.cookie('the_cookie', null); //刪除cookie 經過傳遞null做爲cookie的值便可
<br/>瀏覽器
數據庫內有tom和bob兩個用戶名,密碼均爲123緩存
views.pycookie
def login(request): if request.method == "GET": return render(request, "login.html") else: username = request.POST.get("username") password = request.POST.get("password") query_list = models.UserInfo.objects.filter(username=username,password=password) if query_list.exists(): ret = redirect('index') # ret.set_cookie("is_login", True, max_age=10) # max_age=10 10秒以後失效 # ret.set_cookie("username", username, max_age=10) # 10秒以後失效 # 加密cookie的寫法 ret.set_signed_cookie("is_login", True, "salt", max_age=10) ret.set_signed_cookie("username", username, "salt", max_age=10) return ret # 登錄成功後跳轉主頁 else: return render(request,"login.html") # 登錄失敗以後返回登錄頁 def index(request): print(request.COOKIES) # 打印看一下如今的cookie # is_login = request.COOKIES.get("is_login", False) # username = request.COOKIES.get("username") is_login = request.get_signed_cookie("is_login", False, "salt") username = request.get_signed_cookie("username",salt="salt") print(is_login) # True print(type(is_login)) # <class 'str'> if is_login != 'True': return redirect('login') else: return render(request,"index.html",{"username":username})
login.htmlsession
<form action="{% url 'login' %}" method="post"> {% csrf_token %} <table> <tr>用戶名<input type="text" name="username" id="username"></tr> <tr>密碼<input type="password" name="password" id="password"></tr> <tr><input type="submit" value="登陸"></tr> </table> </form>
index.html
<h1>歡迎{{ username }}來到主頁</h1>
數據庫中的表
<br/>
不一樣的網站session是不同的,這些操做都只是django提供的方法,其餘的框架不適用,須要本身來寫關於cookie和session的方法.
request.session['k1'] request.session.get('k1',None)
request.session這句是從cookie裏面將sessionid的值取出來,將django-session表裏面的對應sessionid的值的那條記錄中的session-data字段的數據給取出來(並解密),get方法就取出k1這個鍵對應的值.可是django-session這個表,不能經過orm來直接控制,由於app中本身定義的models.py裏面沒有這個對應關係
<br/>
生成隨機字符串,自動將這個隨機字符串和用戶數據(加密後)和過時時間保存到了django-session表裏面,以後會自動將這個隨機字符串以sessionid:隨機字符串的形式添加到cookie裏面返回給瀏覽器,這個sessionid名字是能夠改的
request.session['k1'] = 100 request.session.setdefault('k1', 10) # 默認值存在則不設置
<br/>
經常使用:
# 刪除當前的會話數據並刪除會話的Cookie。 request.session.flush()
上面的方法經常使用,會清空全部cookie---刪除session表裏的這個會話的記錄,這用於確保前面的會話數據不能夠再次被用戶的瀏覽器訪問例如django.contrib.auth.logout() 函數中就會調用它。
其餘刪除方法:
# django-session表裏內會同步刪除 del request.session['k1'] # 刪除當前會話的全部Session數據 request.session.delete() # 將全部Session失效日期小於當前日期的數據刪除,將過時的刪除 request.session.clear_expired()
<br/>
# 全部 鍵、值、鍵值對 request.session.keys() request.session.values() request.session.items() # 會話session的key session_key = request.session.session_key 獲取sessionid的值 # 將全部Session失效日期小於當前日期的數據刪除,將過時的刪除 request.session.clear_expired() # 檢查會話session的key在數據庫中是否存在 request.session.exists("session_key") #session_key就是那個sessionid的值 # 刪除當前會話的全部Session數據 request.session.delete() # 刪除當前的會話數據並刪除會話的Cookie。 request.session.flush() #經常使用,清空全部cookie # 設置會話Session和Cookie的超時時間 request.session.set_expiry(value) * 若是value是個整數,session會在些秒數後失效。 * 若是value是個datatime或timedelta,session就會在這個時間後失效。 * 若是value是0,用戶關閉瀏覽器session就會失效。 * 若是value是None,session會依賴全局session失效策略。
<br/> ## 5.Django中的Session配置
django中默認支持session, 其內部提供了5種類型的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 = 1209600 # Session的cookie失效日期(2周)(默認) SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關閉瀏覽器使得Session過時(默認) SESSION_SAVE_EVERY_REQUEST = False # 是否每次請求都保存Session,默認修改以後才保存(默認)
<br/> ## 6.使用session實現簡單的登錄校驗,註銷
def login(request): if request.method == 'GET': return render(request,"login.html") else: username = request.POST.get("username") password = request.POST.get("password") # 查詢用戶名和密碼 ret_obj_list = models.UserInfo.objects.filter(username=username,password=password) if ret_obj_list.exists(): request.session['session_login'] = True request.session['username'] = username # session中的數據至關於data = {"session_login":True,"user":username} return redirect("index") else: return render(request,"login.html") def index(request): print(request.COOKIES) ret = request.session.get("session_login") # 也能夠這麼寫 ret = request.session["session_login"] print(ret, type(ret)) if ret!=True: return redirect("login") else: username = request.session.get("username") return render(request, "index.html",{"username":username}) def logout(request): request.session.flush() return redirect('logout')
login.html
urls中login頁面的別名爲login,註銷的url別名爲‘logout’
<form action="{% url 'login' %}" method="post"> {% csrf_token %} <table> <tr>用戶名<input type="text" name="username" id="username"></tr> <tr>密碼<input type="password" name="password" id="password"></tr> <tr><input type="submit" value="登陸"></tr> <tr><a href="{% url 'logout' %}">註銷</a></tr> </table> </form>
index.html
<h1>歡迎{{ username }}來到主頁</h1>