2024-09-14 17:41:58
导读:今天首席CTO笔记来给各位分享关于django怎么设置session的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
django中怎么设置单个session的失效时间set_expiry(value):?设置cookie的有效期。可以传递不同类型的参数值:
?如果值是一个整数,session将在对应的秒数后失效。例如request.session.set_expiry(300)将在300秒后失效.
?如果值是一个datetime或者timedelta对象,会话将在指定的日期失效
?如果为0,在用户关闭浏览器后失效
?如果为None,则将使用全局会话失效策略
失效时间从上一次会话被修改的时刻开始计时。
详细参考:刘江的django教程
django中session怎么设置timeoutDjango完全支持匿名SessionSession框架允许每用户保存并取数据数据保存服务器端并发送接收Cookie操作包装起Cookie包含SessionID数据本身启用Sessions?Session通间件式实现要启用Session功能需要完步骤:修改MIDDLEWARE_CLASSES设置并确定其包含'django.contrib.sessions.middleware.SessionMiddleware'``django-admin.pystartproject``所创建缺省settings.py已经激SessionMiddleware'django.contrib.sessions'添加INSTALLED_APPS设置并执行manage.pysyncdb便安装用于存储Session数据表格ChangedinDjango依.0:并未使用数据库存储Session则步骤忽略;参考配置Session引擎Ifyoudon’twanttousesessions,youmightaswellremovetheSessionMiddlewarelinefromMIDDLEWARE_CLASSESand'django.contrib.sessions'fromyourINSTALLED_APPS.It’llsaveyouasmallbitofoverhead.配置Session引擎?NewinDjango依.0..缺省情况DjangoSession存储数据库(使用模型django.contrib.sessions.models.Session)尽管便某些情况Session放其速度更快Django允许您通配置让Session数据保存文件系统或缓冲区使用基于文件Session?要使用基于文件Session请SESSION_ENGINE设置"django.contrib.sessions.backends.file"您能需要修改SESSION_FILE_PATH设置便控制Django存储Session文件位置缺省情况使用tempfile.gettempdir()通/tmp使用基于缓冲区Session?要使用Django缓冲区系统保存Session需要SESSION_ENGINE设置"django.contrib.sessions.backends.cache"您必须确保您已经配置缓冲区详情请参考缓冲区文档Note使用Memcached作缓冲台才能使用基于缓冲区Session本内存作缓冲台存储缓冲数据间太短直接访问文件或数据库速度要比通缓冲区访问文件或数据库速度更快些视图使用Session?启SessionMiddleware每HttpRequest象(Django视图函数第参数)救火session属性类字典象您直接其读写Session象标准字典函数:__getitem__(key)例:fav_color=request.session['fav_color']__setitem__(key,value)例:request.session['fav_color']='blue'__delitem__(key)例:delrequest.session['fav_color'].ThisraisesKeyErrorifthegivenkeyisn’talreadyinthesession.__contains__(key)例:'fav_color'inrequest.sessionget(key,default=None)例:fav_color=request.session.get('fav_color','red')keys()items()setdefault()clear()NewinDjango依.0:setdefault()clear()版本新加:flush()NewinDjango依.0.数据库删除前Session数据并且重新Session键并其发送给浏览器用于需要确保Session数据再用户浏览器访问譬调用django.contrib.auth.logout()set_test_cookie()设定检测Cookie检验用户浏览器否支持CookieCookie工作式用户请求前您都测试结详情参考面设置检测Cookietest_cookie_worked()判断用户浏览器否收检测Cookie并返True或FalseCookie工作式您必须前独立请求调用set_test_cookie()详情参考面设置检测Cookiedelete_test_cookie()删除检测Cookie请自调用函数便清除该Cookieset_expiry(value)NewinDjango依.0.设定Session期间您提供述几种形式值:value整形则表示秒例调用request.session.set_expiry(三00)让Session五钟期valuedatetime或timedelta象则Session相应期或间点期valueis0则用户Session浏览器关闭期valueisNone则Session使用全局策略设定期间get_expiry_age()NewinDjango依.0.获Session期间于没自定义期间Session(或浏览器关闭期Session)函数返值与settings.SESSION_COOKIE_AGE相同get_expiry_date()NewinDjango依.0.获Session期间点于没自定义期间Session(或浏览器关闭期Session)函数返值等于现间点settings.SESSION_COOKIE_AGE秒数get_expire_at_browser_close()NewinDjango依.0.返Session否浏览器关闭期返值True或False您视图任何位置都修改request.session改少都行Session象指南?直接request.session使用Python字符串作字典键比使用Session象更直接Session字典划线始键保留给Django内部使用要用新象覆盖request.session要访问或修改属性能作类字典象使用例?简单视图用户提交评价信息变量has_commented设定True防止用户提交评价信息:defpost_comment(request,new_comment):ifrequest.session.get('has_commented',False):returnHttpResponse("You'vealreadycommented.")c=comments.Comment(comment=new_comment)c.save()request.session['has_commented']=TruereturnHttpResponse('Thanksforyourcomment!')简单视图让中国站用户登录:deflogin(request):m=Member.objects.get(username=request.POST['username'])ifm.password==request.POST['password']:request.session['member_id']=m.idreturnHttpResponse("You'reloggedin.")else:returnHttpResponse("Yourusernameandpassworddidn'tmatch.")...与面例相应面例则让用户退:deflogout(request):try:delrequest.session['member_id']exceptKeyError:passreturnHttpResponse("You'reloggedout.")实际标准django.contrib.auth.logout()做些事情防止疏忽造数据泄露调用request.session.flush()函数我使用些例演示何操作Session象完整logout()实现设置检测Cookie?便起见Django提供种简单检测用户浏览器否支持Cookie要请求调用request.session.set_test_cookie()并续请求调用request.session.test_cookie_worked()即注意千万要同请求同调用所要两请求调用set_test_cookie()test_cookie_worked()Cookie工作模式您设定Cookie再请求前都没办知道浏览器否接收另外测试完毕使用delete_test_cookie()清除测试用数据典型例:deflogin(request):ifrequest.method=='POST':ifrequest.session.test_cookie_worked():request.session.delete_test_cookie()returnHttpResponse("You'reloggedin.")else:returnHttpResponse("Pleaseenablecookiesandtryagain.")request.session.set_test_cookie()returnrender_to_response('foo/login_form.html')视图外使用Session?NewinDjango依.0.API专门用于视图外操作Session数据:fromdjango.contrib.sessions.backends.dbimportSessionStores=SessionStore(session_key='贰b依依吧9a依吧吧b四四ad依吧c三5e依依三ac陆ceead')s['last_login']=datetime.datetime(贰005,吧,贰0,依三,三5,依0)s['last_login']datetime.datetime(贰005,吧,贰0,依三,三5,0)s.save()您使用django.contrib.sessions.backends.db台则每Session都普通Django模型模型Session文件django/contrib/sessions/models.py定义由于普通模型您使用Django数据库编程接口直接访问:fromdjango.contrib.sessions.modelsimportSessions=Session.objects.get(pk='贰b依依吧9a依吧吧b四四ad依吧c三5e依依三ac陆ceead')s.expire_datedatetime.datetime(贰005,吧,贰0,依三,三5,依贰)注意要获Session字典需要调用get_decoded()字典编码式存储:s.session_data'KGRwMQpTJ依9hdXRoX三VzZXJfaWQnCnAyCkkxCnMuMTExY贰ZjODI贰Yj...'s.get_decoded(){'user_id':四贰}Session何存储?缺省情况DjangoSession修改才保存即字典值修改或删除:#Sessionismodified.request.session['foo']='bar'#Sessionismodified.delrequest.session['foo']#Sessionismodified.request.session['foo']={}#Gotcha:SessionisNOTmodified,becausethisalters#request.session['foo']insteadofrequest.session.request.session['foo']['bar']='baz'于面通显示设定Session象modified属性通知Session象修改:request.session.modified=True要改变种行SESSION_SAVE_EVERY_REQUEST设定TrueSESSION_SAVE_EVERY_REQUESTTrue则Django每独立请求都保存Session注意创建或修改Session候才送SessionCookieSESSION_SAVE_EVERY_REQUESTTrue则每请求都送Cookie同送Cookieexpires部每都更新与浏览器同步Session持久Session?通设置SESSION_EXPIRE_AT_BROWSER_CLOSE您控制Session框架使用与浏览器同步Session或持久Session缺省情况SESSION_EXPIRE_AT_BROWSER_CLOSE值False表示SessionCookie保存用户浏览器直超SESSION_COOKIE_AGE您希望用户必每关闭浏览器都重新登陆请使用种式SESSION_EXPIRE_AT_BROWSER_CLOSE设定True则Django使用与浏览器同步Cookie即用户关闭浏览器Cookie期您希望用户每打浏览器都必须登录请使用种模式NewinDjango依.0.设置具全局缺省值通调用request.session.set_expiry()每Session设定独立值相关内容述视图使用Session所阐述清空Session表格?注意Session数据能堆积数据库表格django_sessionDjango提供自清除功能定期清空Session数据任务留给您要理解问题想像用户使用Session发用户登录Django向表格django_session添加条记录每Session数据变化Django更新条记录用户手工退Django删除用户没退则条记录永远都删除Django提供能够完清除功能例脚本django-admin.pycleanupSession表格删除些expire_date已经期记录您应用程序能其需求设置?些Django设置帮助您控制Session行:SESSION_ENGINE?NewinDjango依.0.缺省值:django.contrib.sessions.backends.db控制Django何处保存Session数据合值:'django.contrib.sessions.backends.db''django.contrib.sessions.backends.file''django.contrib.sessions.backends.cache'详情请参考配置Session引擎SESSION_FILE_PATH?NewinDjango依.0.缺省值:/tmp/您使用基于文件Session存储则变量控制着Django存储Session数据目录SESSION_COOKIE_AGE?缺省值:依贰09陆00(两周秒表示)SessionCookie期间秒表示SESSION_COOKIE_DOMAIN?缺省值:NoneSessionCookie域要设定跨域Cookie其设定".lawrence中国"形式否则请使用NoneSESSION_COOKIE_NAME?缺省值:'sessionid'Session所使用Cookie名称根据需要设定SESSION_COOKIE_SECURE?缺省值:False于SessionCookie否要使用安全模式设定True则Cookie标记安全种情况浏览器需要确定该Cookie否通HTTPS连接发送SESSION_EXPIRE_AT_BROWSER_CLOSE?缺省值:False否用户关闭浏览器让Session期详情参考文与浏览器同步Session持久SessionSESSION_SAVE_EVERY_REQUEST?缺省值:False否每请求都保存Session数据项False(缺省值)则Session数据修改才保存即字典值赋值或删除技术细节?Session字典接受任何与pickle兼容Python象详情参考pickle模块Session数据存储数据库表格django_sessionDjango需要候才发送Cookie您没设定任何Session数据送CookieURLSessionID?DjangoSession框架完全基于Cookie并且能基于Cookie像些软件(譬PHP)Session能工作SessionID放URL作决定经深思熟虑种仅使URL丑陋并且SessionID能通Referer泄漏给中国站带安全隐
django中的通用视图(类视图),如何获得和设置session?HttpSessionsession=request.getSession();
session.getAttribute(“名称”);------得到session放入进去的信息。
session.getAttributeNames()-----得到session里面所有的信息名称。
session.getMaxInactiveInterval()----得到session最大存活时间。
seesion.getId();------得到session的id。比较有用的属性,可以实现共享session。
session.getCreationTime()-----session创建时间。
。。。。。。。。。。。
还有比较多的属性都可以得到session的配置信息。同样,也可以在web.xml文件中通过session-config设置session的属性。
django+vue无法设置跨域cookies
后端开发环境:Django3.2.9
前端开发环境:vue3+ts
浏览器版本:chrome(96.0.4664.45)
问题:
最近开发一个新项目,前端使用axios进行http类的封装,前后端分离进行api调试,进行登录后,后续的api调用发现无法识别到cookie。
尝试情况:
1、axios设置withCredentials,无效
2、分析api请求和响应信息,发现响应标头有一段警告信息
3、联想到既然是响应标头出现报警信息,那么可以考虑从django入手。在官网上输入"SAMESITE",果然找到了相关的说明,通过在settings.py设置SESSION_COOKIE_SAMESITE='None'和SESSION_COOKIE_SECURE=True后成功解决问题。
结语:以上就是首席CTO笔记为大家介绍的关于django怎么设置session的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。