Django框架 之 Cookie、Session整理补充
Django框架 之 Cookie、Session整理补充
浏览目录
Django实现的Cookie
Django实现的Session
一、Django实现的Cookie
1、获取Cookie
1
2
3
4
5
6
|
request.COOKIES[ 'key' ] request.get_signed_cookie(key, default = RAISE_ERROR, salt = '', max_age = None ) #参数: default: 默认值 salt: 加密盐 max_age: 后台控制过期时间 |
2、设置Cookie
1
2
3
4
|
rep = HttpResponse(...) 或 rep = render(request, ...) 或 rep = redirect() rep.set_cookie(key,value,...) rep.set_signed_cookie(key,value,salt = '加密盐' ,...) |
参数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
def set_cookie( self , key, 键 value = '', 值 max_age = None , 超长时间 expires = None , 超长时间 path = '/' , Cookie生效的路径, 浏览器只会把cookie回传给带有该路径的页面,这样可以避免将 cookie传给站点中的其他的应用。 / 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问 domain = None , Cookie生效的域名 你可用这个参数来构造一个跨站cookie。 如, domain = ".example.com" 所构造的cookie对下面这些站点都是可读的: www.example.com 、 www2.example.com 和an.other.sub.domain.example.com 。 如果该参数设置为 None ,cookie只能由设置它的站点读取。 secure = False , 如果设置为 True ,浏览器将通过HTTPS来回传cookie。 httponly = False 只能http协议传输,无法被JavaScript获取 (不是绝对,底层抓包可以获取到也可以被覆盖) ): pass |
由于cookie保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie。
1
2
3
|
<script src = '/static/js/jquery.cookie.js' > < / script> $.cookie( "key" , value,{ path: '/' }); |
3、删除Cookie
1
|
response.delete_cookie( "cookie_key" ,path = "/" ,domain = name) |
cookie存储到客户端
优点:
数据存在在客户端,减轻服务器端的压力,提高网站的性能。
缺点:
安全性不高:在客户端机很容易被查看或破解用户会话信息
二、Django实现的Session
1、基本操作
1
2
3
4
5
6
7
8
|
1 、设置Sessions值 request.session[ 'session_name' ] = "admin" 2 、获取Sessions值 session_name = request.session[ "session_name" ] 3 、删除Sessions值 del request.session[ "session_name" ] 4 、检测是否操作session值 if "session_name" is request.session : |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#其他操作 5 、get(key, default = None ) fav_color = request.session.get( 'fav_color' , 'red' ) 6 、pop(key) fav_color = request.session.pop( 'fav_color' ) 7 、keys() 8 、items() 9 、setdefault() 10 、flush() 删除当前的会话数据并删除会话的Cookie。 这用于确保前面的会话数据不可以再次被用户的浏览器访问 例如,django.contrib.auth.logout() 函数中就会调用它。 11 用户session的随机字符串 request.session.session_key # 将所有Session失效日期小于当前日期的数据删除 request.session.clear_expired() # 检查 用户session的随机字符串 在数据库中是否 request.session.exists( "session_key" ) # 删除当前用户的所有Session数据 request.session.delete( "session_key" ) request.session.set_expiry(value) * 如果value是个整数,session会在些秒数后失效。 * 如果value是个datatime或timedelta,session就会在这个时间后失效。 * 如果value是 0 ,用户关闭浏览器session就会失效。 * 如果value是 None ,session会依赖全局session失效策略。 |
2、流程解析图
3、示例
views:

- def log_in(request):
- if request.method=="POST":
- username=request.POST['user']
- password=request.POST['pwd']
- user=UserInfo.objects.filter(username=username,password=password)
- if user:
- #设置session内部的字典内容
- request.session['is_login']='true'
- request.session['username']=username
- #登录成功就将url重定向到后台的url
- return redirect('/backend/')
- #登录不成功或第一访问就停留在登录页面
- return render(request,'login.html')
- def backend(request):
- print(request.session,"------cookie")
- print(request.COOKIES,'-------session')
- """
- 这里必须用读取字典的get()方法把is_login的value缺省设置为False,
- 当用户访问backend这个url先尝试获取这个浏览器对应的session中的
- is_login的值。如果对方登录成功的话,在login里就已经把is_login
- 的值修改为了True,反之这个值就是False的
- """
- is_login=request.session.get('is_login',False)
- #如果为真,就说明用户是正常登陆的
- if is_login:
- #获取字典的内容并传入页面文件
- cookie_content=request.COOKIES
- session_content=request.session
- username=request.session['username']
- return render(request,'backend.html',locals())
- else:
- """
- 如果访问的时候没有携带正确的session,
- 就直接被重定向url回login页面
- """
- return redirect('/login/')
- def log_out(request):
- """
- 直接通过request.session['is_login']回去返回的时候,
- 如果is_login对应的value值不存在会导致程序异常。所以
- 需要做异常处理
- """
- try:
- #删除is_login对应的value值
- del request.session['is_login']
- # OR---->request.session.flush() # 删除django-session表中的对应一行记录
- except KeyError:
- pass
- #点击注销之后,直接重定向回登录页面
- return redirect('/login/')

template:

- ===================================login.html==================
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <form action="/login/" method="post">
- <p>用户名: <input type="text" name="user"></p>
- <p>密码: <input type="password" name="pwd"></p>
- <p><input type="submit"></p>
- </form>
- </body>
- </html>
- ===================================backend.html==================
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <h3>hello {{ username }}</h3>
- <a href="/logout/">注销</a>
- </body>
- </html>

4、session存储的相关配置
1、数据库配置(默认)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。 a. 配置 settings.py SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认) 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,默认修改之后才保存(默认) |
2、缓存配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
a. 配置 settings.py SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎 SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置 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,默认修改之后才保存 |
3、文件配置
1
2
3
4
5
6
7
8
9
10
11
12
|
a. 配置 settings.py SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎 SESSION_FILE_PATH = None # 缓存文件路径,如果为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,默认修改之后才保存 |
Django框架 之 Cookie、Session整理补充的更多相关文章
- Django框架 之 Cookie和Session初识
Django框架 之 Cookie和Session初识 浏览目录 Cookie介绍 Django中的Cookie Session 一.Cookie介绍 1.Cookie产生的意义 众所周知,HTTP协 ...
- Django框架07 /cookie和session
Django框架07 /cookie和session 目录 Django框架07 /cookie和session 1. django请求生命周期 2. cookie 3. session 4. 总结 ...
- 第三百一十二节,Django框架,Cookie
第三百一十二节,Django框架,Cookie 注意:获取Cookie是在请求对象里处理,设置Cookie是在响应对象里处理 普通Cookieset_cookie()设置普通cookie 参数: ke ...
- Python 之 Django框架( Cookie和Session、Django中间件、AJAX、Django序列化)
12.4 Cookie和Session 12.41 cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务 ...
- Django框架之cookie和session及开发登录功能
1.cookie是什么? Web应用程序是使用HTTP协议传输数据的.HTTP协议是无状态的协议.一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接.这就意味着服务器无法从 ...
- Django 认证系统 cookie & session & auth模块
概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作原理是:由服务器产生内容,浏 ...
- 49、django工程(cookie+session)
49.1.介绍: 1.cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要"保持状态",因此cookie就是在这样一个场景下诞生. cooki ...
- Django学习手册 - cookie / session
cookie """ cookie属性: obj.set_cookie(key,value,....) obj.set_signed_cookie(key,value,s ...
- 对Django框架中Cookie的简单理解
概念的理解:首先Cookie和Session一样,是django中用于视图保持状态的方案之一.为什么要进行视图保留呢,这是因为浏览器在向服务器发出请求时,服务器不会像人一样,有记忆,服务器像鱼一样,在 ...
随机推荐
- AUL恢复truncate删除的表
背景 接到用户申告,新毕业的兄弟不小心把数据库中的3个关键表给truncate了,由于这个业务还在测试阶段,系统没有任何形式的备份. 客户的OS平台是windows平台,数据库是Oracle9207 ...
- JVM介绍(二)
1 JVM简介 JVM是我们Javaer的最基本功底了,刚开始学Java的时候,一般都是从“Hello World”开始的,然后会写个复杂点class,然后再找一些开源框架,比如Spring,Hibe ...
- 并发问题 关于Redis
并发问题 关于Redis [吐槽]Jimesembria 付费请人解这个BUG , 有没有php同学有兴趣,(问题原因是理论上是5分钟内不生产同样金额的订单, 但是由于并发原因没控制好) 10:34: ...
- oracle驱动包maven下载失败解决
oracle是付费的,因此jar包也不是随便让人下的,这就给maven的下载和编译带来了麻烦,因为我们没法从maven仓库直接拿来用.解决办法就是先从别的地方获取jar包,再放到本地仓库里去,这样运行 ...
- flume采集log4j日志到kafka
简单测试项目: 1.新建Java项目结构如下: 测试类FlumeTest代码如下: package com.demo.flume; import org.apache.log4j.Logger; pu ...
- ORACLE常识
1. ORACLE中查看表中的外键来源于哪些表 select cl.table_name from user_cons_columns cl left join user_constraints c ...
- shell脚本,每5个字符之间插入"|",行末不插入“|”
文本aaaaabbbbbcccccddddeeeeefffffkkkkkvvvvnnnnnggggg 希望得到的结果如下:aaaaa|bbbbb|ccccc|ddddeeeee|fffff|kkkkk ...
- selenium定位方法
- PHP面向对象深入研究之【高级特性】
静态属性 <?php class StaticExample { static public $aNum = 0; // 静态共有属性 static public function sayHel ...
- 微信小程序之工具js封装与使用
工具库的创建与使用 创建一个common文件夹 在common文件夹中创建一个utils文件夹 在utils文件夹中创建util.js // 工具 function tool() { console. ...