Django中session和cookie简单的使用
一、简单的理解
session和cookie是request下的两个对象,操作他们的值就是在操作字典,设置他们的属性就是调用方法。
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。解决此问题,常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
在Django中要用session一定要先执行(创建表的过程):
python manage.py makemigrations
python manage.py migrate
二、session:
*session存储机制:
(1)、当用户来访问服务端时,服务端生成一个随机字符串;
(2)、当用户登录成功后 把 {sessionID :随机字符串} 组织成键值对 加到 cookie里发送给用户;
(3)、服务器以发送给客户端 cookie中的随机字符串做键,用户信息做值,保存用户信息;
所以服务器存储的session格式应该是:
{sessionid:{‘username’:xx,‘password’:yy}}
request.session[‘username’] = ‘xx’
默认生成了随机的sessionid,并且隐含了通过sessionID找到用户信息那一步;
1.、设置值(字典):
request.session['username'] = 'Genius淼'
request.session['password'] = 'genius123'request.session.setdefault('username','password')#username 默认值为'password'
2、设置属性:
request.session.set_expiry(value) -- 设置session过期时间,默认是两周。value:
- 数字(单位:秒)
- datatime(具体日期)
- None(依据全局失效策略)
- timedelta(时间增量)
注意:request.session.set_expiry(timedelta(days=30))时要在setting中添加:SESSION_SERIALIZER='django.contrib.sessions.serializers.PickleSerializer'
3、查看
request.session.keys()
request.session.values()
request.session.items()
4、获取
request.session["username"] # 以字典形式读取,键不存在会报错
request.session.get("username") # 以get方法形式读取,键不存在会报错
request.session.get("username",None) # 加参,如果username不存在则读取到None
request.session.session_key # 用户session的随机字符串
5、删除
del request.session["username"] # 以字典形式删除
request.session.delete("username") # 以方法形式删除
request.session.delete('session_key') #删除所有session
request.session.clear() # 删除所有session
request.session.clear_expired() # 删除已失效session
在setting中配置session(转)
session存储位置:
数据库(默认) SESSION_ENGINE = ‘sdjango.contrib.sessions.backends.db’
缓存 SESSION_ENGINE = ‘django.contrib.sessions.backends.cache’
文件 SESSION_ENGINE = ‘django.contrib.sessions.backends.file’
缓存+数据库 SESSION_ENGINE=‘django.contrib.sessions.backends.cached_db’
加密cookie(相当于没有用session,又把敏感信息保存到客户端了) SESSION_ENGINE = ‘django.contrib.sessions.backends.signed_cookies’
#session配置文件
SESSION_ENGINE = ‘django.contrib.sessions.backends.db’ # 引擎(默认)
SESSION_FILE_PATH = 文件路径 # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()
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,默认修改之后才保存(默认)
三、cookie:
在django中,cookie是在声明一个HttpResponse之后,通过set_cookie方法来设置的。它通过在响应头里Set-Cookie设置键值对来实现在浏览器客户端保存Cookie。
res = HttpResponse() # 具体是什么响应要看自己的return
设置值(字典):
res.set_cookie('username','password')res.set_cookie('Genius淼','genius123')
获取
username = request.COOKIES.get('username')
删除
res.delete_cookie('username')
设置属性:
查看HttpResponseBase类:def set_cookie(self, key, value='', max_age=None, expires=None, path='/',domain=None, secure=False, httponly=False):......
可传参:
key:Cookie的名称
value:Cookie的值
max_age:失效时间,单位-秒。默认是-1 ——>负数:关闭浏览器失效;0表示删除该cookie。
expires:失效日期,同session的set_expiry
path:该Cookie的使用路径,’/‘为允许所有。’/index/‘则只能在/index下可以访问,注意最后的 /
domain:可以访问该cookie的域名,以 ‘.‘开头’,如’.baidu.com’
secure:该Cookie是否仅被使用安全协议传输,默认是False。当使用https时,必须要secure设置为True
httponly:限制在浏览器控制台获取键值对,但无法对抓包工具进行限制。举例:res.set_cookie(“age”, “10”,max_age=“10”,expires=“2019-01-31”,)
加密
设置值:res.set_signed_cookie(‘age’, ‘10’,salt=“I’m secript”)
取值:request.get_signed_cookie(‘age’,salt=“I’m secript”)
如同多加了一条暗号
session与cookie参考
Django中session和cookie简单的使用相关推荐
- php 中session与cookies的区别,php中session和cookie的区别
php中session和cookie的区别 本文较为详细的比较了php中session与cookie区别.分享给大家供大家参考.具体分析如下: 1.存放的位置 cookie保存在客户端,session ...
- PHP中session与cookie的简单使用
2019独角兽企业重金招聘Python工程师标准>>> cookie简单实例: <?php if($_GET['out']){ //注销cookie ...
- java中cookie怎么用_java 中session和cookie的使用
这里讲session和cookie放在一起写, 不是说他们之间有什么关系,仅最近一个项目中同时用到.偷懒,放一起整理下 Session: Session的发明是为了填补HTTP协议的局限.请注意HTT ...
- Django中Session的使用
文章目录 0. 前言 1. 启用Session 2. 设置Session引擎 2.1 基于数据库的Session 2.2 基于Cache的Session 2.3 基于文件系统的Session 2.4 ...
- 在DJango中session的使用方法
Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: ·数据库(默认) ·缓存 ·文件 ·缓存+数据库 ·加密cookie (1)数据库中的Session Djan ...
- PHP中session和cookie的区别
这个话题无论是系统运维还是PHP开发人员面试时会经常遇到,所以这里也进行一些总结和归纳,session和cookie的具体理论网上比较大,大家googel下均可:系统运维注意区分下session(会话 ...
- asp.net 中 SESSION和COOKIE的使用
在各个网页间的变量传递和一些记录用户的登陆信息要用到SESSION和COOKIE.在ASP.NET中使用COOKIE比ASP中稍微麻烦一点,因为我们要申明变量. 首先看一下SESSION的使用,基本和 ...
- php session和cookie区别,php中session和cookie的区别是什么?
一.Session (1)Session的由来以及介绍 Session:在计算机中,尤其是在网络应用中,称为"会话控制",生存时间为用户在浏览某个网站时,从进入网站到关闭这个网站所 ...
- springboot项目中session和cookie
cookie例子: 添加cookie 需要在方法中添加参数 HttpServletResponse response Cookie cookie = new Cookie("u_id&quo ...
最新文章
- 回首2013 展望2014
- 【Java Web开发指南】Maven+MyBatis实现增删改查的Demo
- 【Linux 内核 内存管理】虚拟地址空间布局架构 ② ( 用户虚拟地址空间组成 | 内存描述符 mm_struct 结构体源码 )
- 更新npm至最新版本
- 一步步在SAP Cloud Platform上创建HANA实例并使用
- 《c语言从入门到精通》看书笔记——第6章 选择结构程序设计
- Asp.net三层结构原理与用意学习入门教程(一)
- 经典10046剖析案例-2
- gradle拷贝静态资源文件_Gradle复制文件/目录方法
- 零基础轻松学mysql_零基础轻松学MySQL 5.7
- PhpStorm中如何使用FTP功能
- wpsppt放映时间_利用WPS演示制作PPT计时器的两种方法
- 微信推送封面尺寸_微信公众平台图片尺寸是多少?
- Android开发之各种好看的背景颜色
- 一文理解 ISO、快门、光圈、曝光概念 以及 光圈、焦距与景深的关系
- 电脑可以连接网络,但是无Internet访问权限问题排查
- 奔驰S400豪华型升级后排电动腿托系统,提升后排乘坐舒适性
- Openwrt编译进阶-修改ROOT密码,修改默认WiFi名称,修改主机名,修改主机型号
- 证明三角形sinA+sinB+sinC=4cos(A/2)cos(B/2)cos(C/2)
- 国家开发银行软件测试工资待遇,国家开发银行总行工资待遇
热门文章
- 安装并配置ROS环境
- ui设计颜色的使用_UI设计中颜色使用的10条原则
- unity vr 交互_基于手动的VR / MR交互,用于删除实体
- 谷歌Gboard输入法新增“无痕模式”:仅在Chrome隐身窗口中适用
- Appium移动自动化测试之获取appPackage和appActivity
- Codeforces Round #192 (Div. 2)
- 鄙人之斗,读IT之洋(1)
- Razor视图引擎浅析
- 一起谈.NET技术,异步调用与多线程的区别
- docker 安装ELK