1. 程式人生 > >Django中的cookie和session

Django中的cookie和session

datatime cnblogs 字典 ati 時間 jquery exp close make

cookies

  客戶端瀏覽器上的一個文件

{‘user‘:‘xiaoyanzi‘}

  獲取cookie:

request.COOKIES.get(‘username‘)

  寫cookie:

#設置cookie,關閉瀏覽器失效
			response = render(request,‘index.html‘)
			response = redirect(‘/index/‘)
			response.set_cookie(‘key‘,‘value‘)
                        return response

  cookies參數

#cookie參數:
			 max_age = None #超時時間(秒)
			 expires = None #超時時間(datatime)
					import datetime
					current_data = datetime.datetime.utcnow()
					current_data +=datetime.timedelta(seconds=5)
					res.set_cookie(‘uname‘,‘aa‘,expires=current_data)
					
			path = ‘/‘			#cookie生效的路徑,/表示根路徑
			domain = None		#生效的域名
			secure = False			#https傳輸
			httponly = True		#僅http傳輸,js獲取不地道

  客戶端操作cookie:

    使用jquery插件:jquery.cookie.js

$.cookie(‘key‘,value,{‘path‘:‘/user_rlist/‘})

  密文cookie:

                        obj.set_signed_cookie(salt=‘hhh‘)
	        	request.get_signed_cookie(salt=‘hhh‘)            

  

session

  a.Session 原理     

    session是保存在服務器端的鍵值對。

        session = {
			‘隨機字符串1‘:{
				‘is_login‘:True,
				‘user‘:‘admin‘,
				...
			
			}
			‘隨機字符串2‘:{
				‘is_login‘:True,
				‘user‘:‘admin‘,
				...
			
			}
		
		}

  

  b.Cookie和Session對比

    cookie是保存在用戶瀏覽器端的鍵值對     

    session是保存在服務器端的鍵值對

    session依賴於cookie,發給客戶端只有一條cookie

    基於cookie做用戶驗證時,不放敏感信息

  c.Session配置(缺少cache)

    操作流程:

    #生成隨機字符
    #寫到用戶瀏覽器cookie
    #保存到session中
    #在隨機字符串對應的字典中設置相關內容

    這四步操作只用如下命令就完成了:

                        request.session[‘username‘] = user
			request.session[‘is_login‘] = True            

    配置前準備:

                python manage.py makemigrations
		python manage.py migrate            

  操作:

                                        #獲取當前用戶的隨機字符串
					#根據隨機字符串獲取對應信息
					if request.session[‘is_login‘]:
						return HttpResponse(‘ok‘)
				
				
					request.session.setdefault(‘k1‘,123)  #存在則不設置
					request.session.get[‘k1‘,None]
					del request.session[‘k1‘]
					
					#用戶session的隨機字符串
					request.session.session_key
					#講所有session失效日期小於當前日期的數據刪除
					request.session.clear_expired()
					#檢查用戶session的隨機字符串 在數據庫中是否存在
					request.session.exists(‘session_key‘)
					#刪除當前用戶的所有session數據
					request.session.delete(‘session_key‘)
					request.session.clear()
					#設置session超時時間
					request.session.set_expiry(60*60)       

  配置文件中設置默認操作,在settings中設置:

SESSION_COOKIE_NAME = ‘sissionid‘        #客戶端cookie的id名
SESSION_COOKIE_PATH = ‘/‘               #session的cookie保存路徑
SESSION_COOKIE_DOMAIN = None     #session的kookie保存的域名
SESSION_COOKIE_SECURE = False      #是否https傳輸cookie
SESSION_COOKIE_HTTPONLY = True    #是否只支持http傳輸
SESSION_COOKIE_AGE = 1209600       #超時時間為兩周
SESSION_AT_BROWSER_CLOSE = False     #是否關閉瀏覽器就過期
SESSION_SAVE_EVERY_REQUEST = False    #是否每次請求都保存Session
    

  session支持設置cookie儲存位置,在settings中設置:

SESSION_ENGINE = ‘django.contrib.sessions.backends.db‘	#數據庫
SESSION_ENGINE = ‘django.contrib.sessions.backends.cache‘ #緩存
SESSION_CACHE_ALIAS = ‘default‘    #cache鏈接的名字

ps:chche也有多個鏈接:
CACHES = CACHES = {
					‘default‘:{
							‘BACKEND‘:‘‘, #引擎
							‘LOCATION‘:‘my_cache_table‘ #數據庫表
							‘TIMEOUT‘:300 #超時時間
							‘OPTIONS‘:{
								‘MAX_ENTRIES‘:300, #緩存最大個數
								‘CULL_FREQUENCY‘3, #剔除緩存個數
								}
					‘MEMOCHACHE‘:{
							‘BACKEND‘:‘‘, #引擎
							‘LOCATION‘:‘my_cache_table‘ #數據庫表
							‘TIMEOUT‘:300 #超時時間
							‘OPTIONS‘:{
								‘MAX_ENTRIES‘:300, #緩存最大個數
								‘CULL_FREQUENCY‘3, #剔除緩存個數
								}		
							
						}    

#存在文件中:
SESSION_ENGINE = ‘django.contrib.sessions.backends.file‘	#文件
SESSION_FILE_PATH = os.path.join(BASE_DIR,‘cache‘)

  

Django中的cookie和session