Cookie與Session

Cookie與Session

cookie與session的做用:保存信息html

當第一次登陸成功後,服務端給你返回一個隨機字符串,保存在客戶端瀏覽器上,以後每次超服務端發送請求只須要攜帶該隨機字符串,服務端就能識別當前用戶身份,而且在超過必定時間若是一直沒有訪問,該session值會失效,默認失效時間爲14天django

一、Cookie

HTTP協議是無狀態的,無狀態的意思就是每次請求都是獨立的,人生只如初見,每次請求對服務器來講就是全新的,不會保留數據,可是在某些時候好比登陸的狀態咱們是須要保留的,所以就有了cookie瀏覽器

一、什麼是cookie

cookie指一段從服務端發送來存儲在瀏覽器上一組鍵值對,下次訪問服務器時瀏覽器會自動攜帶這些鍵值對,校驗服務器

二、瀏覽器查看cookie

 三、Django中操做cookie

一、獲取cookiecookie

request.COOKIES[' ']
request.COOKIES.get(" ")

二、設置cookiesession

obj = HttpResponse(" ...")
obj.set_cookie(k, v)

三、刪除cookieurl

obj = HttpResponse(" ...")
obj.delete_cookie('user')  # 刪除用戶瀏覽器上以前設置的usercookie值
# 登陸認證裝飾器
from functools import wraps
def login_auto(func):
    @wraps(func)
    def inner(request, *args, **kwargs):
     # 獲取url後攜帶的路徑 target_url
= request.path_info # 獲取cookie值 if request.COOKIES.get('username'): res = func(request, *args, **kwargs) return res else: return redirect('/login/?next=%s'%target_url) return inner # 登陸 def login(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') if username == 'shen' and password == '123': # 獲取url後綴判斷上次是否訪問過其餘頁面url target_url = request.GET.get('next') if target_url: # 若是是登陸成功後調轉到以前的頁面 obj = redirect(target_url) else: # 不然回到主頁 obj = redirect('/home/') # 設置cookie值,和設置失效時間s # obj.set_cookie('username', 'xxx', max_age=5) obj.set_cookie('username', 'xxx') return obj return render(request, 'login.html') @login_auto def home(request): return HttpResponse('主頁') @login_auto def index(request): return HttpResponse('index頁面') @login_auto def login_out(request): obj = HttpResponse('註銷') # 刪除cookie值 obj.delete_cookie('username') return obj

request.path_info   只拿路徑部分,不拿參數spa

request.get_full_path()   拿路徑加參數code

    print('request.path_info:',request.path_info)  # 只拿路徑部分 不拿參數
    # request.path_info: /home/
    print('request.get_full_path():',request.get_full_path())  # 路徑加參數
    # request.get_full_path(): /home/?username=jason&password=123    

二、session

保存在服務端上的鍵值對htm

一、設置session值

request.session['name'] = 'shen'

設置過程當中作了哪些事:

一、Django內部會自動生成一個隨機字符串

二、去django_session表中存儲數據,鍵就是隨機字符串,值就是保存的數據(中間鍵作的)

三、將生成好的隨機字符串返回給客戶端瀏覽器,瀏覽器保存鍵值對(sessionid)

二、獲取session

res = request.session.get('name')

獲取是作了哪些事:

一、Django會自動去瀏覽器中的cookie值去sessionid鍵值對獲取隨機字符串

二、拿着該字符串去django_session表中比對數據

三、若是比對上了及將字符串對應的數據獲取出來並封裝到request.session中

Django中默認的session值有效期是14天,能夠設置超時時間

request.session.set_expiry(value)
* 若是value是個整數,session會在些秒數後失效。
* 若是value是個datatime或timedelta,session就會在這個時間後失效。
* 若是value是0,用戶關閉瀏覽器session就會失效。
* 若是value是None,session會依賴全局session失效策略。

三、刪除當前會話的全部session數據

# 刪除當前會話的全部Session數據
request.session.delete()
          
# 刪除當前的會話數據並刪除會話的Cookie。  推薦使用
request.session.flush() 
相關文章
相關標籤/搜索