Cookies 和session
一 会话跟踪
在一个会话的多个请求中共享数据,这就是会话跟踪技术
- 请求登录(请求参数是用户名和密码);
- 请求转账(请求参数与转账相关的数据);
- 请求信誉卡还款(请求参数与还款相关的数据)。
登录信息在这个会话中是数据共享的,如果登录的是张三,那么在转账和还款时一定是相对张三的转账和还款!这就说明
我们必须在一个会话过程中有共享数据的能力。
二 cookies篇
1 cookie简单定义
1 cookie是在HTTP中它表示服务器送给客户端浏览器的小甜点。
2 key-value结构;
3 由服务器创建;
4 浏览器保存cookie
2 cookie执行流程
1 浏览器首次post 请求浏览器的时候回携带一个空的cookie :{} 2 如果操作验证通过(登录成功)后,服务器创建一个cookie :{key:value},作为响应头的一部分传给浏览器. 3 浏览器下次访问网页的时候带着 ,这个创建好的cookie:{key:value}请求,服务器查看cookie信息,如果cookie
存在,则放行,否则拦截.
3 cookie规范
注意 :
浏览器之间是不能进行共享cookie的;
也就是说在你使用IE访问服务器时,服务器会把Cookie发给IE,然后由IE保存起来,当你在使用FireFox访问
服务器时,不可能把IE保存的Cookie发送给服务器。
4 cookie 与Http头 -----------cookie 是通过HTTP请求和响应头在客户端和服务端进行传递的;
4.1 cookie:请求头,客户端发给服务器; 首次post请求cookie为空
格式:cookie:a=A;b=B;c=C.多个cookie用';'隔开;
4.2 set_cookie:响应头 ,服务器发送给客户端
格式:一个cookie对象一个set-cookie:
如:set-cookie:a=A set-cookie:b=B set-cookie:c=C
5 cookie覆盖
如果服务器发送重复的cookie,那么会覆盖原有的cookie;
如 :
第一次:Set-Cookie: a=A;
第二次:Set-Cookie: a=AA
则最后客户端留下的cookie是 cookie:a=AA。
6 django中的cookie语法
6.1服务端在验证通过后,设置cookie
rep = HttpResponse(...) 或 rep = render(request, ...) 或 rep = redirect() #rep是响应对象,只有相应对象才有.set_cookie方法 rep.set_cookie(key,value) #一次只能绑定一个cookie键值对 rep.set_signed_cookie(key,value,salt='加密盐') #加密方式绑定cookie键值对
6.2 再次登录,获取cookie信息,进行验证
value=request.COOKIES('key') #获取cookie中键为key的值
6.3 删除cookie
response.delete_cookie("key") #删除cookie中key的那个键值对
7 实例代码
def login(request):
if request.method=='GET':
return render(request,'login.html')
else:
user=request.POST.get('user')
pwd=request.POST.get('pwd')
user_obj=models.UserInfo.objects.filter(user=user,pwd=pwd).filter()
if user_obj:
res_obj=redirect('/index/')
res_obj.set_cookie("is_login",True,max_age=20)
res_obj.set_cookie("user",user)
return res_obj
return HttpResponse('账户或者密码错误')
login cookies
三session篇
1 session 技术
1 给用户的浏览器创建一个独享的session对象; 2 每个浏览器都开辟独有的session资源; 3 用户再去访问该服务器中的其它web资源时,其它web资源再从用户各自的session中 取出数据为用户服务.
2 session 流程
3 django 中的session语法,结合session流程讲解
3.1 设置session
request.session['is_login']=True
3.1.1设置session 执行流程
if not 钥匙:
1 创建随机字符串
2 在django-sesion表中创建记录
session-key session-data
随机字符串 {"k1":"v1","k2":"v2"}
3 res.set_cookie("sessionid",随机字符串)
else: 2 在django-sesion表中创建记录
session-key session-data
随机字符串 {"k1":"v1"}
3 更新
设置session流程
3.2 获取session值
session_name = request.session["session_name"]
3.2.1获取session 执行流程
1 取钥匙 (request.COOKIES.get("sessionid")) 2 在django-sesion表中查询记录:session-key=钥匙 3 通过对象.k1将值返回
获取session流程
3.3 删除session的值
del request.session["session_name"]
3.3.1 获取session执行流程
request.session.get("is_login")的实现: 1 取钥匙; 2 去django-session表中获取对应记录对象 3 通过对象取出is_login这个键对应的值
删除session值的流程
3.4 删除session
request.session.flush()
3.4.1删除session执行流程
1 取钥匙 (request.COOKIES.get("sessionid")) 2 在django-sesion表中查询记录:session-key=钥匙 3 记录对象被删除
flush删除流程
Cookies 和session的更多相关文章
- Cookies和Session的区别
原文:http://www.cnblogs.com/lijihong/p/4743818.html 今天主要学习了Cookies和Session,网络上关于这方面的知识可谓很多,让人眼花缭乱,在此作一 ...
- Cookies和Session理论总结
今天主要学习了Cookies和Session,网络上关于这方面的知识可谓很多,让人眼花缭乱,在此作一个小结.本文不讲多,不讲什么高大上的,只是抛出一块砖,讲三个问题:①什么是Cookies和Sessi ...
- 18、cookies与session学习笔记
本文记录学习 cookies 和 session 的一些小练习和知识点 知识点1 cookies 和 session 的由来 HTTP协议是无状态的协议,因为一旦浏览器和服务器之间的请求 ...
- cookies和session
基于cookies做用户验证时,敏感信息不适合放在cookies中 cookies保存在客户浏览器端的键值对 session保存在服务器端的键值对(依赖于cookies),把用户浏览器中的cook ...
- django cookies与session
1. cookiies # cookies def login(request): print('COOKIES',request.COOKIES) print('SESSION',request.s ...
- 有关cookies与session的详细信息
COOKIES与SESSION 详细信息参考:https://www.cnblogs.com/linguoguo/p/5106618.html 会话(Session)跟踪是Web程序中常用的技术,用来 ...
- django中cookies和session
django中cookies和session是两个经常使用的用户认证工具.都是类似于字典的数据类型,都是request的内部属性 cookies的读写方法 cookies读,比如username us ...
- asp.net网站防恶意刷新的Cookies与Session解决方法
本文实例讲述了asp.net网站防恶意刷新的Cookies与Session解决方法,是WEB程序设计中非常实用的技巧.分享给大家供大家参考.具体实现方法如下: Session版实现方法: public ...
- Cookies和Session的定义与区别
Cookies和Session二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来.当下次你再光临同一个网 ...
随机推荐
- C#版(击败100.00%的提交) - Leetcode 151. 翻转字符串里的单词 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- 手工在Docker for mac上安装Kubernetes
此文发布时间比较早,当前已经有更好的办法,请参考网页: https://github.com/AliyunContainerService/k8s-for-docker-desktop 以下为原文 通 ...
- 从零打卡leetcode之day 4--无重复最长字符串
题目描述: 给定一个字符串,找出不含有重复字符的最长子串的长度. 示例: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3. ...
- Chapter 5 Blood Type——7
"You say that a lot," I noted, trying to ignore the sudden trembling in my stomach and kee ...
- C#3.0智能的编译器
智能的编译器 在C#3.0中,编译器变的越来越智能,我们不用提供给它完整的信息,仅需要提供必要的信息,编译器就可以进行推断为我们补全未提供的信息 自动实现的属性 在之前我们生成一个类时需要有一个字段, ...
- 精读《syntax-parser 源码》
1. 引言 syntax-parser 是一个 JS 版语法解析器生成器,具有分词.语法树解析的能力. 通过两个例子介绍它的功能. 第一个例子是创建一个词法解析器 myLexer: import { ...
- Docker最全教程——从理论到实战(一)
容器是应用走向云端之后必然的发展趋势,因此笔者非常乐于和大家分享我们这段时间对容器的理解.心得和实践. 本篇教程持续编写了2个星期左右,只是为了大家更好地了解.理解和消化这个技术,能够搭上这波车. 你 ...
- CAN总线学习记录之四:位定时与同步
一.位定时 1.1 比特率和波特率 1)位速率:又叫做比特率(bit rata).信息传输率,表示的是单位时间内,总线上传输的信息量,即每秒能够传输的二进制位的数量,单位是bit per second ...
- [Winfrom] 使用一个启动快捷方式,打开2个不同的窗体并且共用一个缓存空间
之所以有这个功能,是不想再给后台和前台写一套通讯机制的情况下偷懒的办法! 之前发现在主函数里面写方法,第二次启动程序打开新窗体或是显示隐藏窗体!最后却发现在主函数里面打开的新窗体和原启动的程序并不是共 ...
- 【eclipse】eclipse报错:the resource is not on the build path of a java project
最近在eclipse中,使用svn导入svn上的一个maven项目,但是导入后类的包并没有以源码包的方式显示,而是以普通文件包的方式显示出来,在对类进行F3等操作时就报错:“the resource ...