Django中的cookie和session

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')

  

原文地址:https://www.cnblogs.com/crazytao/p/7787506.html