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

浙公网安备 33010602011771号