当前位置: 首页 > 后端技术 > Python

Django中session的使用

时间:2023-03-26 00:24:43 Python

1.sessioncookie的概念是在浏览器端保存键值对数据,session是在服务器端保存键值对数据。session的使用依赖于cookie:使用session后,会在cookie中保存一个sessionid数据,每次请求时浏览器都会将这个数据发送给服务器,服务器会找出请求者的收到sessionid后根据这个值进行session。2、Django中Session的存储Session键值对数据存储session键值对数据默认存储在django项目的一个数据库表中(表名:django_session),存储格式如下:其实,数据是加密的,如下图所示:3.Django中的Session配置Django默认支持Session,它提供了5种Session供开发者使用:-数据库(默认)-缓存-文件-缓存+数据库-encryptedcookie1)databaseSessiona.Configuresettings.pySESSION_ENGINE='django.contrib.sessions.backends.db'#Engine(默认)SESSION_COOKIE_NAME="sessionid"#sessioncookie保存在浏览器上时的key,即:sessionid=randomstring(default)SESSION_COOKIE_PATH="/"#sessioncookie保存的路径(default)SESSION_COOKIE_DOMAIN=None#sessioncookie保存的域名(default)SESSION_COOKIE_SECURE=False#HTTPS是否传输cookie(default)SESSION_COOKIE_HTTPONLY=True#sessioncookie是否只支持http传输(默认)SESSION_COOKIE_AGE=1209600#Sessioncookie过期日期(2周)(默认)SESSION_EXPIRE_AT_BROWSER_CLOSE=False#是否关闭浏览器使Session过期(默认)SESSION_SAVE_EVERY_REQUEST=False#每次请求是否保存Session,默认修改后保存(默认)2)CacheSessiona。Configurationsettings.pySESSION_ENGINE='django.contrib.sessions.backends.cache'#EngineSESSION_CACHE_ALIAS='default'#使用的缓存别名(默认内存缓存,或memcache),其中别名取决于缓存设置SESSION_COOKIE_NAME="sessionid"#sessioncookie在浏览器上保存时的key,即:sessionid=randomstringSESSION_COOKIE_PATH="/"#sessioncookie保存的路径SESSION_COOKIE_DOMAIN=None#sessioncookie保存的域名week)SESSION_EXPIRE_AT_BROWSER_CLOSE=False#是否关闭浏览器使Session过期SESSION_SAVE_EVERY_REQUEST=False#是否每次请求都保存Session,修改后默认保存文件3)FileSessiona.配置settings.pySESSION_ENGINE='django.contrib.sessions.backends.file'#EngineSESSION_FILE_PATH=None#缓存文件路径,如果为None,则使用tempfile模块获取临时地址tempfile.gettempdir()#例如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/TSESSION_COOKIE_NAME="sessionid"#sessioncookie在浏览器上保存时的key,即:sessionid=randomstringSESSION_COOKIE_PATH="/"#sessioncookie保存的路径SESSION_COOKIE_DOMAIN=None#sessioncookie保存的域名SESSION_COOKIE_SECURE=False#Https是否传输cookieSESSION_COOKIE_HTTPONLY=True#sessioncookie是否只支持http传输SESSION_COOKIE_AGE=1209600#SessionDate(2周)SESSION_EXPIRE_AT_BROWSER_CLOSE=False#是否关闭浏览器使Session过期SESSION_SAVE_EVERY_REQUEST=False#每次请求是否保存Session,默认修改后才保存.pySESSION_ENGINE='django.contrib.sessions.backends.signed_cookies'#Engine4、Session的基本操作:writesessionrequest.session['key']=value根据key读取valuerequest.session.get('key',defaultvalue)#或者request.session['key']清除所有session,删除存储请求中的部分value.session.clear()清除session数据,删除storage中session的整个数据请求.session.flush()删除session中指定的key和value,只删除session中的某个key和对应的value贮存。delrequest.session['key']设置session数据的有效时间;如果未设置,则默认过期时间为两周request.session.set_expiry(value)如果过期时间的值为整数,会话数据将在value秒不活动后过期。如果过期时间的值为None,则会话永不过期。如果expire_time值为0,则用户的会话cookie将在用户浏览器关闭时过期。4.下面是一个使用示例:#发送短信接口defsms_send(request):#http://localhost:8000/duanxin/duanxin/sms_send/?phone=18434288349#1获取电话号码phone=request.GET.get('phone')#2生成6位验证码code=aliyunsms.get_code(6,False)#3缓存到Redis#cache.set(phone,code,60)#60s有效期#print('判断缓存中是否有:',cache.has_key(phone))#print('获取Redis验证码:',cache.get(phone))#暂时处理request.session['phone']=coderequest.session.set_expiry(300)#设置5分钟后过期print('判断缓存中是否有:',request.session.get('phone'))print('获取session验证码:',request.session.get('phone'))#4发送短信result=aliyunsms.send_sms(phone,code)returnHttpResponse(result)#短信验证码验证defsms_check(request):#/duanxin/sms_check/?phone=xxx&code=xxx#1.手机验证,手动输入Codephone=request.GET.get('phone')code=request.GET.get('code')#2.获取redis中保存的code#print('缓存是否包含:',cache.has_key(phone))#print('Value:',cache.get(phone))#cache_code=cache.get(phone)#获取会话n里的codeprint('取值:',request.session.get('phone'))cache_code=request.session.get('phone')#3.判断ifcode==cache_code:returnHttpResponse(json.转储({'result':'OK'}))否则:返回HttpResponse(json.dumps({'result':'False'}))