Django cookie与session
cookie与session关系
cookie 是保存在客户端浏览器的键值对,浏览器发送请求时候会自动携带。 session 1、生成随机字符串
2、回给浏览器,让它写到cookie # {"sessionID":"234asd243dv35fd"}
3、自己保留一份,作为一个key,存到一个地方,key后面对应一个保存用户相关信息的键值
session-key session-data
234asd243dv35fd {"user":"alex"
概念
cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie因此诞生
cookie工作原理
用户在浏览器登录后,服务端根据用户的登录信息生成键值对(也就是cookie),保存用户的个人信息,然后将键值对返回给浏览器,浏览器保存在本地。当浏览器再次访问时,就会自动将这个键值对(cookie)带上,这样服务端就能通过cookie的内容判断这个用户是谁了。
cookie虽然在一定程度上解决了保持状态的需求,但由于cookie本身最大支持4096字节的数据,以及cookie本身是明文保存在客户端,很容易被拦截或窃取。因此就需要一种能够支持保存更多数据,并且保存在服务端,且具有较高安全性的机制,这就是session。
session工作原理
session是基于cookie工作的
- 用户登录后,服务端随机生成一个字符串,将这个随机字符串作为键值对(cookie)的value,而键值对的key则是由Django的session配置中自定义,默认情况下是sessionid,组成的cookie就{'sessionid':'xxxxxxxxxx'},服务端将这个cookie返回给浏览器,这样,浏览器本地只保存着一个随机字符串;
- 服务端再将第1步中生成的随机字符串做为key,由用户信息产生的字典做为value,组成一个键值对,保存在服务器端;假设随机字符串是"abc123",那组成的键值对理论上类似这样:{'abc123'{'login':true,'username':'jassin'}}
- 下次用户访问时,浏览器带着cookie,服务端根据cookie中的随机字符串就可以找到对应的用户信息了。
session的好处:浏览器端只存在一个随机字符串,避免用户信息被直接暴露在外。
from django.shortcuts import render
from app01 import models
def login(request):
# 记录日志
if request.method == 'GET':
pass
else:
user = request.POST.get('user')
pwd = request.POST.get('pwd')
obj = models.UserInfo.objects.filter(user=user,pwd=pwd).first()
if obj:
# 用户名和密码正确
"""
{
“xxxx的随机字符串”:{'id':1,'name':'jassin'},
“xx的随机字符串”:{'id':11},
} 表:
session_key value
xxxx的随机字符串 asfasdfasdfasdfwer2342fszdfsdfs 1. 生成随机字符串
2. 把随机字符串写到客户端浏览器cookie中
3. 在内存中大字典写入:
{
随机字符串: {'id':用户id}
}
"""
request.session['id'] = obj.id
request.session['name'] = obj.name else:
# 用户名和密码错误
pass
def home(request):
"""
:param request:
:return:
"""
"""
1. 获取客户端cookie中的随机字符串
2. 如果有:
则获取 key 对应的值
否则 返回None """
user_id = request.session.get('id') def temp(request):
data_list = {
'k1':'sf4sdf'
}
return render(request,'temp.html',data_list)
Django实现的cookie
获取Cookie
request.COOKIES['key']
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
参数:
default: 默认值
salt: 加密盐
max_age: 后台控制过期时间
Django cookie与session的更多相关文章
- Python Web框架篇:Django cookie和session
part 1 概念 在Django里面,cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话. 两者最大的区别是cookie的信息是存放在浏览器客户端的,而sessio ...
- python Django cookie和session
在一个会话的多个请求中共享数据,这就是会话跟踪技术.例如在一个会话中的请求如下: 请求银行主页: 请求登录(请求参数是用户名和密码): 请求转账(请求参数与转账相关的数据): 请求信誉卡还款(请求参 ...
- falsk 与 django cookie和session存、取、删的区别
falsk cookie的存取删需导入from flask import Flask,make_response,request# 存COOKIE的方法@app.route('/setcookie') ...
- django cookie与session组件
本文目录 1 会话跟踪技术 2 cookie介绍 Django中操作Cookie Session Django中Session相关方法 Django中的Session配置 CBV中加装饰器 回到目录 ...
- Django - Cookie、Session、自定义分页和Django分页器
2. 今日内容 https://www.cnblogs.com/liwenzhou/p/8343243.html 1. Cookie和Session 1. Cookie 服务端: 1. 生成字符串 2 ...
- django cookie and session
cookie和session 1.cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作 ...
- django cookie、session
Cookie.Session简介: Cookie.Session是一种会话跟踪技术,因为http请求都是无协议的,无法记录上一次请求的状态,所以需要cookie来完成会话跟踪,Seesion的底层是由 ...
- Django Cookie于Session
一.Cookie与Session由来 因为Http协议的特性,每一次来自用户浏览器的请求都是无状态且独立的,通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用 ...
- Django—Cookie and Session
一.Cookie Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份.进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密). 1. 应用 服务器可以利用Co ...
随机推荐
- Java消息队列ActiveMQ (一)--JMS基本概念
摘要:The Java Message Service (JMS) API is a messaging standard that allows application components bas ...
- memcached单点
一.Repcached (memcached同步补丁) 下载地址:http://sourceforge.net/projects/repcached/files/repcached/2.2.1-1.2 ...
- Hbase 布隆过滤器BloomFilter介绍
转载自:http://blog.csdn.net/opensure/article/details/46453681 1.主要功能 提高随机读的性能 2.存储开销 bloom filter的数据存在S ...
- dbml 注意事项
1,修改dbml中的字段,需要修改2个地方
- springmvc 整合微信
springmvc 整合微信 方式一: ① 配置验证 @RequestMapping(value = "/into", method = RequestMethod.GET, pr ...
- 在Linux系统中使用蓝牙功能的基本方法
首先确定硬件上有支持蓝牙的设备,然后运行如下命令,就可以开到我们的蓝牙设备了: lsusb 运行hciconfig可以看到:从上图可以看出,我们的蓝牙设备是hci0运行hcitool dev可以看到我 ...
- 关于Block汇总
//使用总结: //1.当block里面会有b类相关的参数要回调回去的时候,属性用copy修饰,将其拷贝到堆里面,这样即便栈释放掉了,b类的指针也在堆中存在,能够成功的回调回去. //Block默认存 ...
- Ext.grid.GridPanel数据转json
var count = docAdGrid.getStore().getCount(); var jsonArray = []; for (var i = 0; i < count; i++) ...
- Kubernetes 在知乎上的应用
从 Mesos 到 Kubernetes 之前的调度框架是基于 Mesos 自研的.采用的语言是 Python.运行了大概两年多的时间了,也一直比较稳定.但随着业务的增长,现有的框架的问题逐渐暴露. ...
- Author Agreement
Dear Editor,We the undersigned declare that this manuscript entitled “文章标题” is original, has not bee ...