django需要使用一个中间价来实现 session功能, 一般情况下默认启用了该中间价 ,可以在 settings.pyMIDDLEWARE 设置项目中查看。

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

确保下边这句话的存在

'django.contrib.sessions.middleware.SessionMiddleware',

配置储存引擎

session可以存储在数据库,本地缓存中,需要在 settings.py 文件中设置。

存储在sql数据库

默认情况下,django将session存储在数据库中,在 settings.py 文件的 INSTALLED_APPS 配置项中确认有 'django.contrib.sessions' 的存在。

可以设置如下配置项,也可以不写,因为是django的默认配置项。

SESSION_ENGINE='django.contrib.sessions.backends.db'

运行 manage.py migrate 命令进行数据库迁移,在数据库内创建sessions表。

储存在缓存

添加配置项

SESSION_ENGINE='django.contrib.sessions.backends.cache'

但是只把数据储存在缓存中是不安全的。因为一旦缓存满了,系统会自动清除部分数据,服务器重启会清除全部数据。

为了保证数据安全,可以使用以下配置项,在储存在缓存的时候,也会在数据库中储存一份,保证数据安全。

SESSION_ENGINE='django.contrib.sessions.backends.cached_db'

储存在本地文件

添加配置项

SESSION_ENGINE='django.contrib.sessions.backends.file'

同时,必须正确配置SESSION_FILE_PATH(默认使用tempfile.gettempdir()方法的返回值),确保你的文件存储目录,以及Web服务器对该目录具有读写权限。

储存在redis

添加配置项

CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"

redis://127.0.0.1:6379/1 代表储存在本机redis的一号库。

如果redis不是在本机,需要修改redis的配置文件,添加特定ip地址。

Linux环境下,redis的配置项在 /etc/redis/redis.conf

bind 配置项添加地址即可 bind 127.0.0.1 xxx.xxx.xxx.xxx

添加后重启redis服务 sudo service redis-server restart

session操作

通过 HttpRequest 对象的session属性进行会话的读写操作。

以键值对的格式写session。

request.session['键']=值

根据键读取值。

request.session.get('键',默认值)

清除所有session,在存储中删除值部分。

request.session.clear()

清除session数据,在存储中删除session的整条数据。

request.session.flush()

删除session中的指定键及值,在存储中只删除某个键及对应的值。

del request.session['键']

设置session的有效期

request.session.set_expiry(value)
  • 如果value是一个整数,session将在value秒之后,没有活动后过期。
  • 如果value为0,那么用户session的Cookie将在用户的浏览器关闭时过期。
  • 如果value为None,那么session有效期将采用系统默认值,默认为两周,可以通过在settings.py中设置SESSION_COOKIE_AGE来设置全局默认值。

django的Session-10的更多相关文章

  1. 浅析Django之session与cookie

    浅析Django之session与cookie 1 session与cookie概述 原理: 由于HTTP协议是无状态,无连接的,当用户发起网路请求时,需要服务端能标识用户ID,用以存储用户相关信息, ...

  2. django中session的存储位置

    django-session 存放位置 设置session的保存位置,有三种方法: 保存在关系数据库(db) 保存在缓存数据库(cache) 或者 关系+缓存数据库(cache_db) 保存在文件系统 ...

  3. 在Django中Session的那点事!

    1.session是什么 首先引入度娘的解释:Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 We ...

  4. Django之session详解

    好文章来自追风的小蚂蚁:https://www.cnblogs.com/zhuifeng-mayi/p/9099811.html cookie:Cookie,有时也用其复数形式 Cookies,指某些 ...

  5. django cookie session 自定义分页

    cookie cookie的由来 http协议是无状态的,犹如人生若只如初见,每次都是初次.由此我们需要cookie来保持状态,保持客户端和服务端的数据通信. 什么是cookie Cookie具体指的 ...

  6. Django之Session

    Django  -- Seeion介绍 问:       Django的session是什么? 答:       Django 完全支持匿名 Session的. Session 框架允许每一个用户保存 ...

  7. django会话session

    因为因特网HTTP协议的特性,每一次来自于用户浏览器的请求(request)都是无状态的.独立的.通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用户.对于静 ...

  8. 【python】Django设置SESSION超时时间没有生效?

    按手册和网上的方法在settings.py中设置“SESSION_COOKIE_AGE” 和 “SESSION_EXPIRE_AT_BROWSER_CLOSE” 均不生效. 通过查看django的源代 ...

  9. 转:django中session的实现机制

    转:www.jianshu.com 要理解session,首先要搞清楚cookie的概念.由于http是无状态的,服务器不能记住用户的信息状态,因此若由同一个客户端发起的多条请求,服务器不能辨别这些请 ...

  10. 【Django】Session

    目录 介绍 Django中操作Session @ 介绍 Cookie虽然在一定程度上解决了"保持状态"的需求,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存 ...

随机推荐

  1. RecyclerView中notifyDataSetChanged刷新总结

    除了adapter.notifyDataSetChanged()这个方法之外,新的Adapter还提供了其他的方法,如下: public final void notifyDataSetChanged ...

  2. springboot学习入门之四---开发Web应用之Thymeleaf篇

    http://tengj.top/2017/03/13/springboot4/ 1项目结构 说明: root package结构:com.dudu 应用启动类Application.java置于ro ...

  3. 关于 未在本地计算机上注册“VFPOLEDB.1” 的解决方案

    在很古老的时候猿们会使用 Microsoft Visual FoxPro(即Dbf)的数据库,用于对数据的存储,和Access类似,而且两者可以互转,可以把它当成数据文件,如Access数据(MDB) ...

  4. Sql Server tempdb原理-启动过程解析实践

    我们知道在SqlServer实例启动过程中数据库会进行还原(Redo,Undo)然后打开提供服务,但我们知道tempdb是不提供重做机制的(Redo)那tempdb是如何还原的呢?如果tempdb损坏 ...

  5. [C/C++]如何解读返回函数指针的函数声明

    今天在看<深入理解C++11>的时候,看到一段有意思的代码: int (*(*pf())())() { return nullptr; } 我立刻就懵了——从来没有见过这样的函数声明.那么 ...

  6. [翻译] FeSpinner

    FeSpinner The loader collection for iOS app. 收集的iOS加载动画. REQUIREMENT FeSpinner work on any version i ...

  7. Linux vim命令详解

    vi: o  处于下一行编辑模式 A  处于编辑的后面  ==>END gg 文件的开头 98gg 跳转到第98行 Shift + G 文件结尾 $ 文件行结尾 ^ 文件行开头   ==> ...

  8. How To create extension in Hybris(创建Hybris的扩展)

    How To create extension in Hybris What is an extension? An extension is an encapsulated piece of the ...

  9. 拟牛顿 DFP matlab

    function sevnn x=[1,0]'; [x,val]=dfp('fun','gfun',x) end function f=fun(x) f=100*(x(1)^2-x(2))^2+(x( ...

  10. word用宏命令完美解决列表编号变黑块的问题

    相信很多人跟我一样,多次定义新的多级列表,会导致列表编号变成下面这样黑块 在百度搜索结果尝试了鼠标左键选中应用样式,文档关闭后打开问题依旧: 还是得感谢万能的Google,帮我找到了答案. 问题根因: ...