python Cookie Session 相關用法

Cookie一.前言1.http協議是無狀態的.    無狀態的意思是每次請求都是獨立的,它的執行狀況和結果與前面的請求和以後的請求都無直接關係,它不會受前面的請求響    應狀況直接影響,也不會直接影響後面的請求響應狀況.2.cookie產生背景;    狀態能夠理解爲客戶端和服務器在某次會話中產生的數據,那無狀態的就覺得這些數據不會被保留。會話中產生的數據又是    咱們須要保存的,也就是說要「保持狀態」.3.什麼是cookie?   Cookie具體指的是一段小信息,它是服務器發送出來存儲在瀏覽器上的一組組鍵值對,下次訪問服務器時瀏覽器會自動攜帶    這些鍵值對,以便服務器提取有用信息。4.cookie的原理:    由服務器產生內容,瀏覽器收到請求後保存在本地;當瀏覽器再次訪問時,瀏覽器會自動帶上Cookie,這樣服務器就能經過    Cookie的內容來判斷這個是「誰」了。5.cookie的劣勢    Cookie雖然在必定程度上解決了「保持狀態」的需求,可是因爲Cookie自己最大支持4096字節,以及Cookie自己保存在客戶端,可能被攔截或竊取二.Django 中操做Cookie1.獲取Cookierequest.COOKIE['key']   普通request.get_signed_cookie('key',default=RAISE_ERROR, salt='  ',max_age=None)get_signed_cookie方法的參數:    default: 默認值    salt: 加密鹽    max_age: 後臺控制過時時間2.設置Cookierep = HttpResponse(...)rep = render(request, ...)rep.set_cookie(key,value,...)rep.set_signed_cookie(key,value,salt='加密鹽',...)    參數:    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獲取(不是絕對,底層抓包能夠獲取到也能夠被覆蓋)3.刪除Cookiedef logout(request):    rep= redirect('/login')    rep.delete_cookie('is_login')    return rep示例:    from django.shortcuts import render,redirect,HttpResponse    #裝飾器    def login_required(func):        def inner(request,*args,**kwargs):            return_url=request.path_info    #home獲取用戶輸入的查詢信息            print(111)            if request.COOKIES.get('is_login','')=='True':   #若是該用戶在線            # if request.get_signed_cookie('is_login','',salt='xxx')=='True':    #加鹽獲取cookie                ret=func(request,*args,**kwargs)   #執行home函數將結果賦值給ret                return ret    #返回ret            else:                return redirect('/login/?ReturnUrl={}'.format(return_url)) #若是用戶還沒登陸直接跳轉到login頁面                # 加上用戶訪問的 頁面路徑信息        return inner    def login(request):        err_msg=''        if request.method=='POST':            username=request.POST.get('username')            pwd=request.POST.get('pwd')            if username=='alex' and pwd=='alex':  #當用戶驗證成功之後                return_url=request.GET.get('ReturnUrl')  #獲取用戶想要訪問的頁面路徑信息                # print(return_url)                if return_url:   #若是訪問的路徑存在                    print('aaa')                    # print(return_url)                    ret = redirect(return_url) #   則直接跳轉到訪問頁面                else:                    ret= redirect('/index/')      #若是路勁信息不存在  則直接跳轉到index                ret.set_cookie('is_login','True')   #保存狀態  設置COOKIE                # ret.set_signed_cookie('is_login','True',salt='xxx')   #加鹽                return ret            else:   #用戶驗證不成功                err_msg="用戶名或密碼錯誤"        return render(request,'login.html',{'err_msg':err_msg})    # def index(request):    #     if request.COOKIES.get('is_login')=='True':    #         return render(request,'index.html')    #     else:    #         return redirect("/login/")    @login_required    def index(request):            return render(request,'index.html')    @login_required  #先執行裝飾器    def home(request): #匹配到home執行home函數        return HttpResponse('這是home頁面')    # 刪除    @login_required    def logout(request):        rep= redirect('/login')        rep.delete_cookie('is_login')        return repSession一.前言1.產生背景    Cookie彌補了HTTP無狀態的不足,讓服務器知道來的人是「誰」;可是Cookie以文本的形式保存在本地,自身安全性較差;    因此咱們就經過Cookie識別不一樣的用戶,對應的在Session裏保存私密的信息以及超過4096字節的文本。2.session的優點    支持更多的字節,而且他保存在服務器,有較高的安全性二.Django 中Session相關方法1.獲取session中的數據    request.session['k1']    request.session.get('k1',None)2.設置session中的數據    request.session['k1']=123    request.session.setdefault('k1',123)3.刪除session中的數據    del request.session['k1']4.全部鍵    request.session.keys()    request.session.iterkeys()5.全部值    request.session.values()    request.session.itervalues()6.全部鍵值對    request.session.iteritems()7.會話session的key    request.session.session_key8.將全部Session失效日期小於當前日期的數據刪除    request.session.clear_expired()9.檢查會話session的key在數據庫中是否存在    request.session.exists("session_key")10. 刪除當前會話的全部Session數據    request.session.delete()11.刪除當前的會話數據並刪除會話的Cookie    request.session.flush()   這用於確保前面的會話數據不能夠再次被用戶的瀏覽器訪問12. 設置會話Session和Cookie的超時時間    request.session.set_expiry(value)    *若是value是個整數,session會在些秒數後失效。    * 若是value是個datatime或timedelta,session就會在這個時間後失效。    * 若是value是0,用戶關閉瀏覽器session就會失效。    * 若是value是None,session會依賴全局session失效策略。三.Django中的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,默認修改以後才保存(默認)
相關文章
相關標籤/搜索