上周一个新的应用场景,带出来了关于django session管理的问题。

公司的另一个App以Widget的形式嵌入我们的页面,就是我们提供一些url,另一个App通过iframe的形式嵌入这些url的respone页面到自己的页面中。

QA发现,当两个App都session timeout后,重新sso登录另一个App, 当打开Widget页面,发现iframe里面嵌入的我们App的页面还处于session timeout状态,只有通过强制刷新才能重新获得respone,不然没有反应。

我开始感觉有点儿奇怪,因为不管我们的App是否session timeout,只要Widget的页面发出url请求,我们的App就会进行相应的响应,没有session timeout直接返回请求内容,session timeout了,进行sso验证,然后进行App自身的authentincation验证,验证通过就解析url请求,进行相应的响应。只要account进行了sso登录,并且在我们App的user表里这个account是可用的,我们就会正常返回。

显然是中间某一步出了问题,因为我本人对django的session管理并不是很熟悉,这块儿的代码的开发者已经不再这个项目中,骤然接手,改起来相当吃力,故周末先学习一下django的Session管理。

django框架启动session只需要在setting.py中配置默认的session中间件,如果自定义了session管理中间件,要配置在django中间件的下面。

MIDDLEWARE_CLASSES = (
...
'django.contrib.sessions.middleware.SessionMiddleware',
'MyAuthenMiddleware.MySessionMiddleware',
...
) INSTALLED_APPS = (
...
'django.contrib.sessions',
...
)

此后,在有请求时,django就会给request增加一个session的dict,存放session信息。

django提供了四种方式存储session,默认的是存储到DB , 除此之外,还有存储到文件,存储到cache,存储到cookie。

相应的配置也比较简单,在setting.py里面进行 “SESSION_ENGINE”相应的设置。使用cache存储时,好像只支持分布式缓存系统,因为本地缓存保存session的时间太短了。使用cookie存储的时候,django提供了验证浏览器是否支持cookie的功能。因为本项目使用的是默认的存储到DB中的方式,所以对其它方式不是很了解,就不多说了。

django是如何管理DB中的session信息的呢?

当setting.py配置好session相关的MIDDLEWARE_CLASSES和INSTALLED_APP之后,启动项目,django就会启用Session Model层的Session类,并在数据库中生成django_session视图,视图中只有三个字段:session_key,session_date,expire_data.

每当django接受一个新的请求,都会产生一个session,这个session里面会有session_key,session_date,expire_data,当然这个session_key,session_date会被加密(用django project的secret_key进行加密),然后存储到django_session表里。

如果接受到的是一个已记录的尚未expire的session发来的请求,则会更新django_session表中session_key相同的那行记录,主要更新内容包括session_data,和expire_data。

如果session timeout,即expire_data小于当前时间,当这个session发来请求时,session就变成了anonymous,同时,request中的user.name也变成了anonymouser.

以上都是django默认的session管理,当然,开发者也可以利用django提供的方法,对session进行一定的操作。

从request中获取session :session = request.session然后就可以使用相关的方法。

具体请参考:

Using sessions in views

django session的更多相关文章

  1. Redis+Django(Session,Cookie)的用户系统

    一.Django authentication django authentication提供了一个便利的user api接口,无论在py中 request.user,参见Request and re ...

  2. Redis+Django(Session,Cookie、Cache)的用户系统

    转自 http://www.cnblogs.com/BeginMan/p/3890761.html 一.Django authentication django authentication 提供了一 ...

  3. Django session相关操作

    Django session 是存储在数据库中的所以要先跟数据库建立连接 本连接有Django跟数据库建立连接的操作:https://www.cnblogs.com/Niuxingyu/p/10296 ...

  4. Django session 源码流程

    流程 Django session源码流程 首先执行的是SessionMiddleware的init方法 import_module(settings.SESSION_ENGINE) 导入了一个 dj ...

  5. Django - session 会话跟踪技术

    1.session简介 |session 英 /'seʃ(ə)n/ 美 /'sɛʃən/ 基于cookies开发,将值存到服务端 写session 读session Session是服务器端技术,利用 ...

  6. django session 使用案例

    django session 使用案例 HTTP被设计为”无状态”,每次请求都处于相同的空间中. 在一次请求和下一次请求之间没有任何状态保持,我们无法根据请求的任何方面(IP地址,用户代理等)来识别来 ...

  7. Django 2.0 学习(21):Django Session

    Django Session Session 与Cookie 1.简介 1.Cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们又需要"保持状态",因 ...

  8. Django Session配置

    Django Session的三种存储方式 SESSION_ENGINE='django.contrib.sessions.backends.db' # default 保存到数据库中,依赖 'dja ...

  9. Django session cookie 上传文件、详解

    session 在这里先说session 配置URL from django.conf.urls import patterns, include, url from django.contrib i ...

随机推荐

  1. LianLianKan[HDU4272]

    LianLianKan Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. unity textFilde

    #pragma strict private var editUsername:String; private var editPassword:String; private var editSho ...

  3. 【BZOJ】1051: [HAOI2006]受欢迎的牛(tarjan)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1051 这题还好-1A了..但是前提还是看了题解的 囧.....一开始认为是并查集,oh,不行,,无法 ...

  4. spring整合quartz并持久化

    spring整合quartz有两种方式: 一.常见是使用配置文件,将定时任务保存到内存中 简单示例: <!-- 短信催还提醒任务调度 --> <bean id="overd ...

  5. Resume简历中装B的词汇总结大全

    1. Accelerated 35. Empowered 69. Motivated 2. Accomplished 36. Enabled 70. Negotiated 3. Achieved 37 ...

  6. 我对Java的java.lang.Class这个类的深入理解

    类是对同一类事物的描述,字段具体的值只有到类实例化时才会指定,静态字段除外.所有的类也是同一类事物,用Class这个类来描述.Class类与String.Person等类是同一个级别的.java的字节 ...

  7. 安装Bind过程中提示丢失MSVCR110.dll的解决办法

    前几天在线安装Visual Studio 2012 Update 3,由于在线安装需要不断下载安装文件,时间很长,后来等不下去,就取消了,不幸的是VS启动不了了,弹出“devenv.exe – 系统错 ...

  8. linux下IPTABLES配置

    如果你的IPTABLES基础知识还不了解,建议先去看看. 开始配置 我们来配置一个filter表的防火墙. (1)查看本机关于IPTABLES的设置情况 [root@tp ~]# iptables - ...

  9. Codeforeces 617E XOR and Favorite Number(莫队+小技巧)

    E. XOR and Favorite Number time limit per test 4 seconds memory limit per test 256 megabytes input s ...

  10. ZZULIOJ 1726 迷宫(BFS+小坑)

    1726: 迷宫 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 394  Solved: 64 SubmitStatusWeb Board Descr ...