Django中的cookie和session
Posted 痴道三
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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‘)
以上是关于Django中的cookie和session的主要内容,如果未能解决你的问题,请参考以下文章