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的更多相关文章

  1. Django学习笔记(5)——cookie和session

    一,前言 1.1,什么是会话跟踪技术 在JavaWeb中,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束.在一个会话的多个请求中共享数据,这就是会话跟踪技术. 例如在一 ...

  2. Django学习笔记之URL与视图cookie和session

    cookie和session cookie:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了 ...

  3. Django学习笔记之Cookie、Session和自定义分页

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  4. Django学习之Cookie和Session

    一.Cookie 1.Cookie的由来 2.什么是Cookie 3.Cookie的原理 4.查看Cookie 二.Django中操作Cookie 1.获取Cookie 2.设置Cookie 3.删除 ...

  5. Django学习目录

    Django学习目录 Django框架简介 Django基础 >>点我 ORM介绍 Django中ORM介绍 >>点我 ORM表操作 Django中ORM表相关操作 >& ...

  6. Django学习笔记(9)—— 开发用户注册与登录系统

    一,项目题目: 开发用户注册与登录系统 该项目主要练习使用Django开发一个用户注册与登录的系统,通过这个项目然后巩固自己这段时间所学习的Django知识. 二,项目需求: 开发一个简单的用户登录与 ...

  7. django 学习之DRF (三)

    Django学习之DRF-03 视图集    1.视图集介绍    2.视图集基本使⽤        1.需求 使⽤视图集获取列表数据和单⼀数据        2.实现 class BookInfoV ...

  8. Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API

    用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...

  9. Django学习笔记(18)——BBS+Blog项目开发(2)主体思路及流程

    这篇博客主要完成一个BBS+Blog项目,那么主要是模仿博客园的博客思路,使用Django框架进行练习. 准备:项目需求分析 在做一个项目的时候,我们首先做的就是谈清楚项目需求,功能需求,然后才开始写 ...

随机推荐

  1. SQL Server 2012使用OFFSET/FETCH NEXT分页及性能测试

    最近在网上看到不少文章介绍使用SQL Server 2012的新特性:OFFSET/FETCH NEXT 实现分页.多数文章都是引用或者翻译的这一篇<SQL Server 2012 - Serv ...

  2. HYSBZ 1208 宠物收养所 (Splay树)

    题意:一家宠物收养所负责处理领养者与遗弃宠物业务,有人来领宠物,则领一只最理想的.若没有宠物了,领养者们就得等到宠物来,宠物一来立刻送给其中一个等待者.如果有两个理想的选择,则选择那个值较小的.收养所 ...

  3. os x 中出现message sent to deallocated instance 的错误总结

    一般是程序中的某一个对象被release 了两次 一般情况下是与你定义的类型有关 这里面我的错误是吧 NSString 类型的变量的属性 设置为了 assign 了 目测与这个有关 补充object- ...

  4. 为什么ABAP整型的1转成string之后,后面会多个空格

    有同事问这个问题:lv_s是从int4转过来的,长度为2,和硬编码的lv_s2(长度为1)相比,后面多了个空格. 为什么?查SAP ABAP的编程帮助F1 help. 帮助文档说的很清楚了:如果赋值操 ...

  5. oracle的系统表

    -- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX开头的绝大部分都是视图-- DBA_TABLES意为DBA拥有的或可以访问的所有的关系表.-- ALL_TABLES意为某一 ...

  6. git 设置ss代理

    git config --global https.proxy http://127.0.0.1:1080       git config --global https.proxy https:// ...

  7. “打开ftp服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹"

    阿里云虚拟主机上传网站程序 问题场景:网页制作完成后,程序需上传至虚拟主机 注意事项: 1.Windows系统的主机请将全部网页文件直接上传到FTP根目录,即 / . 2. 如果网页文件较多,上传较慢 ...

  8. tcpdump抓包指令使用示例

    tcpdump是一个用于截取网络分组,并输出分组内容的工具. tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具.tcpdump提供了源代码,公开了 ...

  9. 解决sqlplus无法退格问题

      # wget http://download.openpkg.org/components/cache/rlwrap/rlwrap-0.42.tar.gz # tar -zxf rlwrap-0. ...

  10. JavaScript:对Object对象的一些常用操作总结

    JavaScript对Object对象的一些常用操作总结. 一.Object.assign() 1.可以用作对象的复制 var obj = { a: 1 }; var copy = Object.as ...