django学习之- session
session和cookie关系:session依赖于cookie
基于cookie做用户验证时,敏感信息不适合放在cookie中
原理:
cookie定义:保存在用户游览器端的键值对
session定义:保存在服务器端的键值对
session原理:客户端发起登录请求,服务器端通过验证后,生成随机字符串返回给客户端,并且服务器端将此字符串和客户端信息存储
到本地数据库中,用于客户端下次登录验证。
session 和 cookie 区别
cookie只是保存在客户端游览器的内容为键值对的文件,session是存储在服务器端的,可以文件,缓存,数据库形式存在,随机字串和数据
存储在服务器端,只将随机字符串返回给客户端
以下为一个帐号登录实例:
def login(request):
if request.method == 'GET':
return render(request,'login.html')
elif request.method == 'POST':
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == 'root' and pwd == '':
# 设置session帐号登录名称及登录状态
request.session['username'] = user
request.session['is_login'] = True
request.session.set_expiry(10) # sesson超时时间10秒
return redirect('/index/')
else:
return render(request,'login.html') def index(request):
# 获取session值
if request.session.get('is_login',None):
return render(request,'index.html',{'username':request.session['username']})
def logout(request):
# 删除所有session,进行当前登录注销
request.session.clear()
return redirect('/login')
操作介绍:
request.session['k1'] # 获取k1的值,不存在则报错
request.session.get('k1',None) # 获取k1的值,不存在则返回None
request.session['k1'] = 123 # 不存在则创建,存在则更新
request.session.setdefault('k1',123) # 不存在则创建默认值,存在则不作操作
del request.session['k1'] # 删除k1
键,值,键值对操作
request.session.keys() # 提取所有键
request.session.values() # 提取所有值
request.session.iterkeys() # 迭代键
request.session.itervalues() # 迭代值
request.session.iteritems() # 迭代键值
request.session.session_key # 用来获取session字符串
request.session.clear_expired() # 清除所有已超过自身设定超时时间的session
request.session.exists('session_key') # 检查session字串在数据库中是否存在
request.session.delete('session_key') # 删除当前用户的所有session数据
request.session.clear() # 清除用户的所有session数据,用于注销
request.session.set_expiry(value): 设置session超时时间,默认2周
# 如果value是个整数,session会在value秒后失效,
# 如果value是个datatime或timedelta,session会在这个时间后失效
# 如果value是0,用户关闭游览器session会失效
# 如果value是None,session会依赖全局session失效策略
配置文件setting中设置默认操作:
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认),表示session默认存储在数据库中
SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认)
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认)
主要:SESSION_SAVE_EVERY_REQUEST = True # 超时时间按照每次访问之后开启计算
session存储位置如下:引擎配置
1:数据库(默认)
2:缓存配置:
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
memcache写法:
CACHES = {
'default': { # 这里的default就是上面缓存配置的default
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
3:文件配置:
SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()
4:缓存+数据库
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎
5:加密cookie session
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎,加密后放入cookie
django学习之- session的更多相关文章
- Django学习笔记(5)——cookie和session
一,前言 1.1,什么是会话跟踪技术 在JavaWeb中,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束.在一个会话的多个请求中共享数据,这就是会话跟踪技术. 例如在一 ...
- Django学习笔记之URL与视图cookie和session
cookie和session cookie:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了 ...
- Django学习笔记之Cookie、Session和自定义分页
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...
- Django学习之Cookie和Session
一.Cookie 1.Cookie的由来 2.什么是Cookie 3.Cookie的原理 4.查看Cookie 二.Django中操作Cookie 1.获取Cookie 2.设置Cookie 3.删除 ...
- Django学习目录
Django学习目录 Django框架简介 Django基础 >>点我 ORM介绍 Django中ORM介绍 >>点我 ORM表操作 Django中ORM表相关操作 >& ...
- Django学习笔记(9)—— 开发用户注册与登录系统
一,项目题目: 开发用户注册与登录系统 该项目主要练习使用Django开发一个用户注册与登录的系统,通过这个项目然后巩固自己这段时间所学习的Django知识. 二,项目需求: 开发一个简单的用户登录与 ...
- django 学习之DRF (三)
Django学习之DRF-03 视图集 1.视图集介绍 2.视图集基本使⽤ 1.需求 使⽤视图集获取列表数据和单⼀数据 2.实现 class BookInfoV ...
- Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API
用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...
- Django学习笔记(18)——BBS+Blog项目开发(2)主体思路及流程
这篇博客主要完成一个BBS+Blog项目,那么主要是模仿博客园的博客思路,使用Django框架进行练习. 准备:项目需求分析 在做一个项目的时候,我们首先做的就是谈清楚项目需求,功能需求,然后才开始写 ...
随机推荐
- js中传统事件绑定模拟现代事件处理
大家都知道,IE中的现代事件绑定(attachEvent)与W3C标准的(addEventListener)相比存在很多问题, 例如:内存泄漏,重复添加事件并触发的时候是倒叙执行等. 下面是用传统事件 ...
- IntelliJ IDEA openfire 使用IntelliJ IDEA 部署OPENFIRE 服务端
用MyEclipse部署OF的步骤,网上有很多,可以自行google,这里要记录的是用据说最好用的JAVA编辑器IntelliJ IDEA来部署OF服务端.试了好多下,终于成功了,记录下. 直接上图吧 ...
- php同时查询两个表的数据
业务环境,表一 会员等级表, 表二会员表, 有一个字段是相同的 会员等级ID level 在会员的显示页面要直接显示会员的会员等级名称,不是等级ID. 1.同时查询两个表 2.表设置别名, selec ...
- MongoDB最简单的入门教程之一 环境搭建
MongoDB是近年来非常流行的一个介于关系数据库和非关系数据库之间的解决方案,特别广泛地应用于国内很多互联网公司,是非关系数据库当中功能最丰富,最像关系数据库的. MongoDB支持的数据结构非常松 ...
- github 下载全部项目
从github下载资料过程中,有些项目含有子模块,有时通过git clone 或者下载zip方式项目可能会缺少文件,因此需要执行 git submodule update --init --recur ...
- Python3简明教程(十二)—— 模块
在这节我们将要学习 Python 模块相关知识.包括模块的概念和导入方法,包的概念和使用,第三方模块的介绍,命令行参数的使用等. 模块 到目前为止,我们在 Python 解释器中写的所有代码都在我们退 ...
- uva1352 Colored Cubes LA3401
白书第一章例题8 好麻烦! 正方体每面编号为0-5,那么根据顶点和正面,就能确定形态.一共6*4=24种形态. P[i]表示编号i所在位置.比如P[1]=3,表示第二面转到了第四面. 就可以表示出所有 ...
- rfcn讲解博客
http://www.cnblogs.com/lillylin/p/6277094.html ROI pooling操作的输入(对于C+1个类)是k^2*(C+1)*W' *H'(W'和H'是ROI的 ...
- 洛谷P2802 回家
贱呼呼的搜索题 这个最贱的还是在于路途的标记,大部分的题目路途的标记是直接标记即可也就是说我走过了这个点,那么这个点标记上以后不再走,这个题不是,我走过了,但是我可能回了血我又继续走 所以说我们标记的 ...
- VS C++项目报错warning C4199: ……use /Zc:twoPhase-
具体的报错如下: c1xx : warning C4199: two-phase name lookup is not supported for C++/CLI, C++/CX, or OpenMP ...