Django学习手册 - cookie / session
cookie
- """
- cookie属性:
- obj.set_cookie(key,value,....)
- obj.set_signed_cookie(key,value,salt="加密盐",....)
- 参数:
- key 键
- value=“” 值
- max_age=None 超时时间
- expires=None 超时日期
- path="/" cookit生效的路径,/表示根路径,特殊的,跟路径的cookie可以被任何url被任何url的页面访问
- domain=None cookie生效的域名
- secure=False https传输
- httponly=False 只能http协议传输,无法javascript获取(不是绝对,底层抓包可以获取到)
- 获取cookie
- request.COOKIES
- request.COOKIES['username']
- request.COOKIES.get("username")
- 设置cookie
- response = render(request,'index.html')
- response = redirect("/index/")
- response = set_cookie("key","value")
- return response
- 加盐配置:
- obj = HttpResponse("S")
- 获取加盐cookie
- obj.set_signed_cookie("username","passwd",salt="jiayan")
- 设置加盐cookie
- obj.get_signed_cookie("username",salt="jiayan")
- 获取与设置的加盐 一定要是相同的加盐字符
- """
前端:(login 页面)
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <div>
- <form action="/login/" method="post">
- <p>
- <span>用户名:</span> <input type="text" name="user">
- <span>密码:</span><input type="password" name="pwd">
- <input type="submit" value="提交">
- </p>
- </form>
- </div>
- </body>
- </html>
前端:(index页面)
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <h1>
- 欢迎登录.........
- </h1>
- </body>
- </html>
URL:
- from django.contrib import admin
- from django.urls import path
- from django.conf.urls import url
- from app01 import views
- urlpatterns = [
- path('admin/', admin.site.urls),
- url('^login/', views.login),
- url('^index/', views.index),
- ]
后端:
- from django.shortcuts import render,HttpResponse,redirect
- # Create your views here.
- def login(request):
- print(request.COOKIES)
- print(request.session)
- if request.method == "POST":
- u = request.POST.get("user",None)
- p= request.POST.get("pwd",None)
- if u == "root" and p == "":
- # cookie的方式:
- # ret = redirect("/index/")
- # #设置cookie数值
- # ret.set_cookie("name","123",10)
- # return ret
- #session方式
- request.session["info_login"]=True
- request.session["user"] = u
- return redirect("/index/")
- else:
- redirect("/login/")
- return render(request,"login.html")
- def index(request):
- #cookie
- # if request.COOKIES.get("name",None):
- # print("index")
- # return render(request,"index.html")
- #session
- if request.session.get("info_login",None):
- name = request.session.get("user")
- return render(request,"index.html")
- #session 默认存放在数据库中。
- else:
- return redirect("/login/")
--------------------------------------------------------------------------------------------------------------------------------------------------------
装饰器的方式:
- from django.shortcuts import render,redirect,HttpResponse
- # Create your views here.
- def aut(fum):
- def log(request,*args,**kwargs):
- if request.COOKIES.get("user",None):
- return fum(request,*args,**kwargs)
- else:
- return redirect("/login/")
- return log
- def login(request):
- if request.method == "POST":
- u = request.POST.get("user", None)
- p = request.POST.get("pwd", None)
- if u == "root" and p == "":
- ret = redirect("/index/")
- # ret.set_cookie("user", u)
- ret.set_signed_cookie("user",u,salt="abcd")
- return ret
- else:
- return redirect("/login/")
- return render(request,"login.html")
- @aut
- def index(request):
- return HttpResponse("OK")
- 核心 session
- 1.session 依赖cookie
- 2.Session流程
- 3.Session操作
- 4.Session配置
- 5.Session存储
注意!!!
django 默认数据存储在数据表格中的,所以在配置好之前一定要创建数据表格!!!
python manage.py makemigrations
python manage.py migrate- #生成随机字符串
- #写到用户浏览器cookie
- #保存到session中
- #在随机字符串对应的字典中设置相关内容
- Request.session[‘user’] = user
- Request.session[‘is_login’] = True
- Return redirect(“/index/”)
- #Session 获取数据
- Request.session[‘k1’]
- Request.session.get(“k1”,None)
- #设置数据
- Request.session[‘k1’] = 123
- Request.session.setdefault(“k1”,123)
- #存在则不设置
- #删除数据
- Del request.session[‘k1’]
- Request.session.clear()
- Request.session.delete(‘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”)
- Request.session.set_expiry(value)
- *如果value是个整数,session会在些秒数后失效。
- *如果是value是个datatime或timedelta,session就会在这个时间后失效
- *如果value是0,用户关闭浏览器session就会失效。
- *如果value是None,session会依赖全局session失效策略
- #在setting里面设置
- SESSION_COOKIE_NAME = “sessionid”
- #session 的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
- SESSION_COOKIE_PATH = ‘/’
- #session 的cookie 保存的路径(默认)
- SESSION_COOKIE_DOMAIN=None
- #session 的cookie 保存的域名(默认)
- SESSION_COOKIE_SECURE=False
- #是否HTTP传输cookie
- SESSION_COOKIE_HTTPONLY=True
- #是否session的cookie只支持http传输
- SESSION_COOKIE_AGE = 1209600
- #失效日期2周默认
- SESSION_COOKIE_AT_BROWSER_CLOSE=False
- #是否关闭浏览器使得session过期
- SESSION_SAVE_EVERY_REQUEST=False
- #是否每次请求都保存session,默认修改之后才保存
session数据可以在request中提取到,所以后端不必传值。
- #用session 传递数据至前端(session数据封装在request里)
- #前端:
- <span>
- <h3>{{request.session.user}}</h3>
- </span>
- #后端
- def index(request):
- if request.session.get(“is_log,None)
- return render(request,”index.html”)
- else:
- return redirect(“/login/”)
Django 中默认支持session,其内部提供了5中类型的session公开发者使用:
- 数据库(默认)
- 缓存
- 文件
- 缓存+数据库
- 加密+cookie
Django学习手册 - cookie / session的更多相关文章
- python 学习笔记十九 django深入学习四 cookie,session
缓存 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求一个页面,Web服务器将进行所有涵盖数据库查询到模版渲染到业务逻辑的请求,用来创建浏览者需要的页面.当程序访问量大时,耗时必然会更加明显, ...
- Django学习之Cookie和Session
一.Cookie 1.Cookie的由来 2.什么是Cookie 3.Cookie的原理 4.查看Cookie 二.Django中操作Cookie 1.获取Cookie 2.设置Cookie 3.删除 ...
- 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和session的介绍 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...
- django学习之- Cookie
cookie:客户端游览器上的一个文件,以键值对进行保存,类似字典{'k':'sfs'},与服务器端没有关系,当游览器访问服务器时候,服务器会生成一个随机字符串保存在cookie中返回给客户端,这样当 ...
- 【转】学习总结--Cookie & Session总结
转载地址:http://www.phperzone.cn/portal.php?aid=718&mod=view 一.状态管理 1)什么是状态管理? 将浏览器与web服务器之间多次交互过程 ...
- Web安全测试学习笔记(Cookie&Session)
一,Session:含义:有始有终的一系列动作\消息1, 隐含了“面向连接” 和“保持状态”两种含义2, 一种用来在客户端与服务器之间保持状态的解决方案3, 也指这种解决方案的存储结构“把××保存在s ...
- Django学习手册 - 权限管理(二)
从数据库获取数据后,对数据进行清洗 目标: 数据1,存放至session 中的数据 数据2,显示至前端的菜单数据 清洗数据: 1.session存放的数据:(menu_leaf_dict) 2.前端菜 ...
随机推荐
- BZOJ1036[ZJOI2008]树的统计——树链剖分+线段树
题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v ...
- MT【58】反演圆和极线极点和谐统一
解答:如图 评:1.反演圆及其性质介绍: 评2:此题的源头是1995年全国卷压轴题,这里用极线极点的相关性质也可以处理: 注:用相关点法很容易得到轨迹.
- 【刷题】LOJ 2863 「IOI2018」组合动作
题目描述 你在玩一个动作游戏.游戏控制器有 \(4\) 个按键,A.B.X 和 Y.在游戏中,你用组合动作来赚金币.你可以依次按这些按键来完成一个组合动作. 这个游戏有一个隐藏的按键序列,可以表示为由 ...
- FFT/NTT总结+洛谷P3803 【模板】多项式乘法(FFT)(FFT/NTT)
前言 众所周知,这两个东西都是用来算多项式乘法的. 对于这种常人思维难以理解的东西,就少些理解,多背板子吧! 因此只总结一下思路和代码,什么概念和推式子就靠巨佬们吧 推荐自为风月马前卒巨佬的概念和定理 ...
- 自学Linux Shell12.6-嵌套循环for命令
点击返回 自学Linux命令行与Shell脚本之路 12.6-嵌套循环for命令 嵌套循环就是在一个循环中还有一个循环. 内部循环在外部循环体中,在外部循环的每次执行过程中都会触发内部循环,直到内部循 ...
- A1041. Be Unique
Being unique is so important to people on Mars that even their lottery is designed in a unique way. ...
- java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 不能使用 '(未知的)';文件已在使用中
最近查看程序输入的日志时发现一个java连接Access的程序时不时的抛出: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driv ...
- 洛谷 P3951 小凯的疑惑(数学)
传送门:Problem P3951 https://www.cnblogs.com/violet-acmer/p/9827010.html 参考资料: [1]:http://m.blog.sina.c ...
- sqlserver 导入数据出现 无法创建 OLE DB 取值函数。请查看列元数据是否有效
我用的是Sql Server 的导入导出功能来实现的,但是有些数据可以导进去,有些就不行.总是出现一些错误! 执行之前 (错误)消息错误 0xc0202005: 数据流任务: 在数据源中找不到列“Un ...
- redis实现队列
转:https://www.cnblogs.com/nullcc/p/5924244.html 问题:如果一个并发很大的消息应用,想要根据请求的优先级来处理? 答案:用Redis 详解: 一是并发量大 ...