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. local_listener参数的作用!

    转自:http://warehouse.itpub.net/post/777/472788 pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,要想让pmon动态 ...

  2. 第三届移动互联网测试开发大会 PPT合集下载

    PPT下载地址 http://www.51test.space/archives/2887 大会介绍 Mobile Testing Summit China(中国移动互联网测试开发大会)是一个以移动测 ...

  3. ORACLE数据泵还原(IMPDP命令)

    Oracle数据库还原IMPDP命令是相对于EXPDP命令的,方向是反向的.即对于数据库备份进行还原操作.一.知晓IMPDP命令 C:\>impdp -help Import: Release ...

  4. apache2.2+php5.3+mysql5.5+Zend Guard Loader集成包

    由前一篇文章 http://www.cnblogs.com/darktime/p/3407980.html 我就配置了一个环境包,免安装的,只需要运行一个.bat的文件文件就算安装成功了 如果你需要用 ...

  5. [翻译] NSDate-TimeAgo

    NSDate-TimeAgo https://github.com/kevinlawler/NSDate-TimeAgo NSDate+TimeAgo has merged with DateTool ...

  6. 给category添加基本数据类型属性

    给category添加基本数据类型属性 说明 通常,我们添加属性都是通过对象扩展来实现的,其实,我们也可以用runtime来添加基本数据类型的属性 源码 // // UIView+AnimationP ...

  7. 浅谈jodaTime 的使用

    第一步:引入依赖: 1 <dependency> 2 <groupId>joda-time</groupId> 3 <artifactId>joda-t ...

  8. 缓存知识整理(包含Redis)

    一.缓存知识 1.buffer和cache的区别 Buffer 缓冲 写操作 写缓冲    Cache 缓存 读操作 读缓存 磁盘-->内存-->CPU 2.PHP的缓存方案 官方文档:h ...

  9. 第二次作业--APP案例分析

    网易云音乐APP分析 第一部分 调研, 评测 1.APP打开界面简洁,一进入APP便能看到APP推荐的歌单,再使用的时候可以更多的了解新的歌曲 2.APP顶部分为三个板块为音乐管理.音乐推荐(音乐推荐 ...

  10. ajax跨域请求在IE8中存在的问题

    从没打算怎么去兼容老版本IE,毕竟微软自己都放弃了,可是最近做好的东西在所有的IE下都会出问题:GetJson不执行 本来觉得挺简单的,度娘也给出了一大堆的解决方案,可惜,基本上都是在说缓存,实际上并 ...