首页 > 其他分享 >Django中使用session,并设置过期时间

Django中使用session,并设置过期时间

时间:2023-04-15 17:13:19浏览次数:37  
标签:过期 Django session cookie key 添加 response 服务端

Django中session的使用

使用背景

django中自带了一个数据库,名字是djang_session,用户做用户凭证。它有三个字段

session_key session_data expire_data
这个数字会返回给客户端 存储的相关信息 过期时间

流程:
1. 用户首次输入账户名和密码,服务端判断正确之后创建一个sesion的信息,也就是在数据库中添加一条数据,
2. 其中session_key是随机生成的,session_data是服务端手动添加的一些信息,我们可以让它是个对象,也可以是个具体的值,这些都是加密过的。如果不设置过期时间,那么默认是两周,也就是14天,如果想手动设置,可以在settings.py文件下添加SESSION_COOKIE_AGE = 3600 # 1小时 这个字段。
3. 生成的session_key我们通过在响应头中添加Set-Cookie字段,之后客户端会将这个sessin_Key存到服务端。
4.之后每次用户请求时都需要在cookie中携带这个sessino_key,服务端做校验,就达到了持续性会话。

出现问题

我之前使用的就是上述这种方法,采用前后端分离的模式。但是遇到了很多问题。
首先遇到的就是cors跨域问题,如果我们想解决这个跨域问题可以借助django-cors-headers中间件进行处理,用的时候需要注意在settings.py文件中进行注册,同时在中间件配置项中进行更改。
之后还需要在每个视图的响应体中添加相关字段

response = HttpResponse()
# 设置允许使用cookie
response['Access-Control-Allow-Credentials'] = 'true'
response['Access-Control-Allow-Origin'] = '*'
response.set_cookie('sessionid', session_key, max_age=86400)
return response

感觉一切都没有问题了,但是后面在使用时又出现问题了。

前端在接收的响应后,可以得到Set-Cookie字段以及相应的sessoin_Key,但是我们在发送请求设置cookie时却遇到
image
后来又去网上搜索,各种情况,比如客户端添加withCredentials:true,服务端也添加内容,但是似乎都没有解决。

解决办法

采用类似token的方式。也就是客户端在接收到这个session_key之后将数据存到本地存储中,之后每次请求时在请求头中添加Authorization:'Beaner '+session_key,之后服务端就可以获取到请求头中的这个字段并进行校验,也就达到了一个校验的目的。
image

但是sesion和cookie是挂钩的,意思就是,这个不具备过期时间,也就是一直可以获取,解决的办法可以采用下述参考回答:
image

上述代码均由chatGpt生成,感谢chatGpt。

标签:过期,Django,session,cookie,key,添加,response,服务端
From: https://www.cnblogs.com/zx529/p/17321434.html

相关文章

  • django渲染模版时比实际少了8小时?
    这是因为django的时间是UTC时间.我们通过改配置文件将其改成本地时间修改配置文件#将时间从UTC转化成当前时间TIME_ZONE='Asia/Shanghai'#USE_TZ=Truehtml页面上面渲染<td>{{foo.create_datetime|date:"Y-m-dH:i:s"}}</td>......
  • django 按天统计发布单数量
    fromdatetimeimportdatetime,timedeltafromdjango.httpimportJsonResponsefromdeploy.modelsimportDeployPoolfromdjango.db.modelsimportCountdefget_a_month_deploy(request):return_list=[]now=datetime.no......
  • kubernets 集群证书过期解决方式
    查看证书过期时间kubeadmcertscheck-expiration解决方案手动更新证书#更新证书kubeadmcertsrenewall#重启相关服务dockerrestart$(dockerps|grep-E'kube-apiserver|kube-controller-manager|kube-scheduler|etcd'|awk'{print$1}')原文链接https://www.c......
  • 集群中几种session同步方案
    集群中session安全和同步是个最大的问题,下面是我收集到的几种session同步的方案,希望能通过分析其各自的优劣找出其适应的场景。1.客户端cookie加密这是我以前采用的方式,简单,高效。比较好的方法是自己采用cookie机制来实现一个session,在应用中使用此session实现。问题:session中数......
  • django创建应用
    在manage.py所在的目录下,运行以下命令python3manage.pystartapppolls目录结构:一、编写第一个视图打开polls/views.py,输入以下代码fromdjango.urlsimportpathfrom.importviewsurlpatterns=[path("",views.index,name="index"),] 在polls/urls......
  • Django——视图
    Django的视图(View)一个视图函数(类),简称视图,是一个简单的Python函数(类),它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中FBV与CBVFBV(FuncitonB......
  • django入门学习
    一、创建项目django-adminstartprojecttest1查看项目目录结构cdtest1tree test1:项目的容器。manage.py:一个实用的命令行工具,可让你以各种方式与该Django项目进行交互。test1/__init__.py:一个空文件,告诉Python该目录是一个Python包。test1/asgi.p......
  • python 之 session鉴权的处理
    一、session鉴权的处理1.requests的会话对象就像一个浏览器一样,它会在同一个会话中自动处理cookie信息,不需要写任何额外的代码。importrequests  session=requests.Session()#理解为就是一个浏览器  type(session)  requests.sessions.Sess......
  • 用Abp实现找回密码和密码强制过期策略
    @目录重置密码找回密码发送验证码校验验证码发送重置密码链接创建接口密码强制过期策略改写接口Vue网页端开发重置密码页面忘记密码控件密码过期提示项目地址用户找回密码,确切地说是重置密码,为了保证用户账号安全,原始密码将不再以明文的方式找回,而是通过短信或者邮件的方式发送一......
  • Django Admin SimpleUI 自定义列
    DjangoAdminSimpleUI的一些简单用法注意事项:自定义列会遍历所有取出来的数据,需注意先定义下模型#models.pyclassDog(models.Model):name=models.CharField(max_length=15,verbose_name='小狗名字')age=models.IntegerField(verbose_name='小狗年龄',defa......