cookie和session 以及Django中应用
cookie和session 以及Django中应用
cookie和session机制
cookie和session机制
cookie机制采用的是在客户端保持状态的方案。作用就是为了解决HTTP协议无状态的缺陷所做的努力。
session机制采用的是一种在客户端与服务器之间保持状态的解决方案。由于采用服务器端保持状态的方案在客户端也需要保持一个标识,
所以session机制可能需要借助于cookie机制来达到保存标识的目的。session还提供了方便管理全局变量的方式。
session 是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分哪个用户的session
cookie和session内容
cookie内容主要包括:key, value, 过期时间,路径和域。路径和域一起构成了cookie的作用范围。
cookie的使用是由浏览器按照一定的规则在后台自动发送给服务器的,浏览器检查所有储存的cookie,
如果某个cookie的作用范围大于等于将要请求的资源所在位置,将cookie附在请求资源的HTTP请求头上发给服务器。
cookie的生命周期跟过期时间相关,如果不设置过期时间,成为回话cookie,保存在内存中,关闭浏览器窗口,cookie消失。
如果设置过期时间,浏览器会把cookie写入硬盘,这些cookie仍然有效,直到超过设定的过期时间。
存在硬盘上的cookie可以在同一个浏览器不同进程间共享,比如两个Chrome窗口。存在内存的,不同浏览器不同的处理方式。
session内容,服务器使用类似python字典的 key value的形式存储的,存储session方式很多,数据库,缓存,文件,加密cookie,数据库加缓存。
Django中的cookie
cookie中的一些参数:
-- max_age=1, cookie生效的时间,单位是秒。
-- expires 具体的过期时间
-- path= “/” 作用路径 写/代表所有的url都可以访问到cookie 可以指定url
-- domain= None None代表当前域名 指定哪个域名以及它下面的二级域名(子域名)可以访问这个cookie
-- secure = False Https安全相关
-- httponly=False 限制只能通过http传输 JS无法再传输中获取和修改
设置cookie以及获取cookie
# 设置cookie
# 普通设置方式
response_obj.set_cookie("key", "value",expires="time",path="/") # 加盐
# 加盐需要在服务端进行解盐才能查看
response_obj.set_signed_cookie("k","v",salt="gaoxin")
# 获取cookie
# 普通
cookies = request.COOKIES.get("key")
# 加盐
cookies = request.get_signed_cookie("k", salt="gaoxin")
cookie + session 的工作原理
-- 1 当用户来访问服务器时,服务端生成一个随机字符串。
-- 2 当用户登录成功后,把 {sessionID:随机字符串} 加到cookie里发送给浏览器用户。
-- 3 服务器以发送给客户端cookie中的随机字符串为键,用户信息做值,保存用户信息
Django中的session
django中session中一些方法:
注意 :request.session['name'] = 'gaoxin' 默认隐含了通过sessionID找到用户信息那一步,删除也是如此。
# 获取,设置,删除session中数据
# 获取
request.session['key']
request.session.get('key', None) # 不报错 设置一个默认值
# 设置
request.session['key'] = "value"
request.session.setdefault('key', "value")# 存在则不设置
# 删除
del request.session['key'] # 获取所有的键,值,键值对
request.session.keys()
request.session.values()
request.session.items()
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems() # 用户session的随机字符串
request.session.session_key # 清除数据库过期的session
request.session.clear_expired()
# 检查用户session的随机字符串是否在数据库中
request.session.exists("session_key")
# 清除当前用户的所有session数据
request.session.delete("session_key")
# 设置session的过期时间
request.session.set_expiry(value)
# 如果value是个整数 session会在这些秒后失效
# 如果是个datetime类型的 就会在这个时间后失效
# 如果value是0,用户关闭浏览器session就会失效
# 如果value是None,session就会依赖全局session失效策略
session的配置文件
# 引擎 (存储位置)
SESSION_ENGINE = "django.contrib.session.backends.file"
SESSION_ENGINE = "django.contrib.session.backends.cached_db"
# 缓存文件路径
SESSION_FILE_PATH = "文件路径" # cookie保存在浏览器上的key 即 sessionID = 随机字符串
SESSION_COOKIE_NAME = "gaoxin" # cookie 保存的路径
SESSION_COOKIE_PATH = '/' # cookie保存的域名
SESSION_COOKIE_DOMAIN = None # 是否https传输cookie
SESSION_COOKIE_SECURE = False # 是否只支持http传输
SESSION_COOKIE_HTTPONLY = True # cookie失效日期为600000秒 默认1209600秒
SESSION_COOKIE_AGE = 600000 # 是否关闭浏览器使session过期
SESSION_EXPIRE_BROWSER_CLOSE = False # 如果设置成True 会在每次请求服务器的时候会以新的请求时间向后延期过期时间
# 淘宝一直逛就不会登出 不刷新页面过段时间就自动登出
SESSION_SAVE_EVERY_REQUEST = True
cookie和session 以及Django中应用的更多相关文章
- {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...
- cookie和session在Django中的应用
1 会话跟踪技术 什么是会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而1008 ...
- Cookie、Session和Django分页
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...
- COOKIE与SESSION、Django的用户认证、From表单
一.COOKIE 与 SESSION 1.简介 1.cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. ...
- Python 之 Django框架( Cookie和Session、Django中间件、AJAX、Django序列化)
12.4 Cookie和Session 12.41 cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务 ...
- day 62.3 Django基础八之cookie和session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx ...
- day 73 Django基础八之cookie和session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 x ...
- django中操作cookie与session
cookie 什么是Cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息. Cookie的 ...
- Django中cookie&session的实现
1.什么叫Cookie Cookie翻译成中文是小甜点,小饼干的意思.在HTTP中它表示服务器送给客户端浏览器的小甜点.其实Cookie是key-value结构,类似于一个python中的字典.随着服 ...
随机推荐
- redis 的备份策略,最好使用:RDB-AOF 混合持久化
相关资料: Redis 4.0 新功能简介:RDB-AOF 混合持久化:http://blog.huangz.me/2017/redis-rdb-aof-mixed-persistence.html ...
- Spring Cloud(Dalston.SR5)--Zuul 网关-微服务集群
通过 url 映射的方式来实现 zuul 的转发有局限性,比如每增加一个服务就需要配置一条内容,另外后端的服务如果是动态来提供,就不能采用这种方案来配置了.实际上在实现微服务架构时,服务名与服务实例地 ...
- centos-rpm安装的mariadb,php52源码编译安装时注意点
1.不要静态指定with-mysql 以扩展的mysql.so的形式安装 2.找不到header file之类的 要yum install mysql-devel find / -name mysql ...
- ThreadLocal的学习
一 用法ThreadLocal用于保存某个线程共享变量:对于同一个static ThreadLocal,不同线程只能从中get,set,remove自己的变量,而不会影响其他线程的变量.1.Threa ...
- googletest--Death Test和Exception Test
Death Test验证某个状态会使进程以某个错误码和错误消息离开 #include <gtest\gtest.h> #include "MyStack.h" // D ...
- NodeJs中类定义及类使用
1.首先定义类Point,文件名为point.class.js: // 定义类 class Point { //构造函数 constructor(x, y) { this.x = x;//类中变量 t ...
- U3D学习14-一阶段学习总结
一.UGUI界面拖拽 1.物品类中继承以下5个接口 命名空间: UnityEngine.EventSystem; IBeingDragHandler (OnBeingDrag) IDragHandle ...
- first*php*self*
要完成一个简单的php程序,首先就是要分析一下要完成所需要实现哪些功能,以及页面的整体布局,以及会涉及到的一部分数据库的函数以及SQL语句. 今天自己简要做了一个php程序,拿到手后就开始创建所能用到 ...
- centos7 设置系统默认启动的界面
系统默认 以某种方式启动 使用systemd创建符号链接指向默认运行级别. 修改方法为:在root下 1.首先删除已经存在的符号链接rm /etc/systemd/system/default.tar ...
- Java并发编程75个问答
1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon( ...