http的无状态协议

http是一种无状态协议,浏览器请求服务器时无状态的

什么是无状态?

无状态:指的是一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。

无状态协议:

  1. 协议对于事务处理没有记忆能力
  2. 对于同一个url的请求没有上下文的关系
  3. 每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接联系的,它不会受前面的请求赢啊情况直接影响,也不会影响后面的请求应答情况。
  4. 服务器中没有保存客户端的状态,客户端必须每次带上自己的状态去请求服务器。

无状态原因:浏览器和服务器是通过socket套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的socket连接,而且服务器也会在处理页面完毕之后销毁页面对象。

那么,有时候我们也需要保持用户的浏览状态,比如,用户是否登录过,浏览过哪些商品等。

举个例子说明一下什么是有状态和无状态:

怎么实现状态保持呢?

  • 在客户端存储信息使用cookie
  • 在服务器端存储信息使用session

cookie的交互流程

如何设置和获取cookie呢?

下面用代码简单演示一下:

from flask import Flask
from flask import make_response app = Flask(__name__) @app.route('/')
def demo1():
return 'demo1' @app.route("/login")
def login():
# 默认账号和密码都是正确的
response = make_response("hellow")
return response if __name__ == '__main__':
app.run(debug = True)

通过make_response(“响应体”)创建response响应对象. 然后返回.

与直接return “响应体” 是一样的.

但是这里我们需要用到response响应对象,去设置cookie,所以需要这样写.

设置cookie

from flask import Flask
from flask import make_response app = Flask(__name__) @app.route('/')
def demo1():
return 'demo1' @app.route("/login")
def login():
# 默认账号和密码都是正确的
response = make_response("hellow")
# 设置cookie
response.set_cookie("user_id","")
response.set_cookie("user_name","laowang")
return response if __name__ == '__main__':
app.run(debug = True)

访问login之后,如果此时我们再访问当前网站的任何url,浏览器都会通过request携带cookie,传递给服务器.

获取cookie

我们另外写一个视图函数来显示获取cookie

from flask import Flask
from flask import make_response
from flask import request app = Flask(__name__) @app.route('/')
def demo1():
return 'demo1' @app.route("/login")
def login():
# 默认账号和密码都是正确的
response = make_response("hellow")
# 设置cookie
response.set_cookie("user_id","")
response.set_cookie("user_name","laowang")
return response @app.route("/get_cookie")
def get_cookie():
"""获取cookie"""
user_id = request.cookies.get("user_id")
user_name = request.cookies.get("user_name")
return "user_id=%s>>>>>> user_name=%s"%(user_id,user_name) if __name__ == '__main__':
app.run(debug = True)

通过上面分别访问/login>>>>>>/>>>>>>/get_cookie可以看出,cookie已经能够被浏览器保存记录,并且可以在站内各个页面进行传递

cookie的过期时间和删除操作

cookie作为客户端保存的数据,相对来说不是十分安全,因为你登录浏览过一个网站之后,过一会也可能别人会用你的浏览器,这时候你保存的cookie可能就会被别人利用。

设置cookie的有效时长,超过这个时间,cookie自动销毁

@app.route("/login")
def login():
# 默认账号和密码都是正确的
response = make_response("hellow")
# 设置cookie
response.set_cookie("user_id","",max_age=3600) # 单位:秒
response.set_cookie("user_name","laowang",max_age=3600)
return response

退出登录之后,主动销毁cookie

@app.route('/logout')
def logout(): #销毁cookie
response = make_response("quit success")
response.delete_cookie("user_id")
response.delete_cookie("user_name")
return response

此时,其实我们发现cookie并没有删除,而是将过期时间=创建时间,即:max_age=0

这样的话,cookie就失去了它的功能作用。那么我们也认为cookie被删除了。

Flask基础(10)-->http的无状态协议解决办法一(客户端cookie)的更多相关文章

  1. Flask基础(11)-->http的无状态协议解决办法二(服务端session)

    session的交互流程 Session 对于敏感.重要的信息,建议存在服务器端,不能存储在浏览器中,比如用户名,密码,余额,验证码等信息 在服务器端进行状态保持的方案就是Session Sessio ...

  2. HTTP协议是无状态协议,怎么理解?

     Http是一个无状态协议,同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对象中的全部信息外,该环境不保存与会话有关的不论什么信息. 自己的理解,在 ...

  3. HTTP协议是无状态协议,怎么理解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp24 HTTP协议是无状态协议,怎么理解?  2010-02-23 09:4 ...

  4. 《图解HTTP》读书笔记(三:无状态协议/cookie管理状态)

    HTTP是一种不保存状态,即无状态(stateless)协议.HTTP协议自身不对请求和响应之间的通信状态进行保存. ——HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了Co ...

  5. http无状态协议,cookie和session详解(一)

    1.HTTP无状态协议 首先看百度百科给出的定义: HTTP无状态协议,是指协议对于事务处理没有记忆能力.缺少状态意味着如果后续处理需要前面的信息,则它必须重传, 这样导致可能每次连接传送的数据量增大 ...

  6. HTTP无状态协议

    http://baike.baidu.com/view/4551466.htm HTTP协议是无状态协议. 无状态是指协议对于事务处理没有记忆能力.缺少状态意味着如果后续处理需要前面的信息,则它必须重 ...

  7. HTTP无状态协议理解

    TTP协议是无状态协议. 无状态是指协议对于事务处理没有记忆能力.缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大.另一方面,在服务器不需要先前信息时它的应 ...

  8. HTTP要点概述:五,HTTP的无状态性,持久连接,Cookie

    一,HTTP的无状态性: HTTP 是一种不保存状态,无状态(stateless)协议.HTTP 协议自身不对请求和响应之间的通信状态进行保存.也就是说在 HTTP 这个级别,协议对于发送过的请求或响 ...

  9. Eclipse无提示的解决办法 和 内容辅助技巧

    Eclipse无提示的解决办法 和 内容辅助技巧 一.若发现内容辅助失效没有提示 下面是解决办法,现贴出来与大家共享:       1.菜单window->Preferences->Jav ...

随机推荐

  1. Node开发知识概括

    一. javascript高级话题(面向对象,作用域,闭包,设计模式等) 1. 常用js类定义的方法有哪些? 参考答案:主要有构造函数原型和对象创建两种方法.原型法是通用老方法,对象创建是ES5推荐使 ...

  2. 用java实现取1-100之间的99个不重复的随机数 然后输出没有被取出的数字

    package cn.kgc.springtest2.demo1.dao; import java.util.BitSet; /** * @author * @create 2019-08-02 17 ...

  3. Linux下手动安装JDK

    一.删除自带的JDK 查询系统自带JDK rpm -qa | grep java rpm -qa | grep jdk 删除查询出来的文件名 rpm -e --nodeps 文件名 命令执行成功后重新 ...

  4. 2019nc#2

    A Eddy Walker 题意 你有n个点(0-n-1),按顺序形成一个环,初始时你在0的位子,你随机顺时针走一步或者逆时针走一步, 一旦你走到一个点后,环上所有点都被经过至少一次后,你就必须停下来 ...

  5. 2019DX#1

    1001 Blank 题意 有一个长度为n(n<=100)的位子,填入四种颜色,有m个限制,某个区间的颜色个数要恰好等于x个.问颜色个数的方案数. 思路 DP 四维的DP,利用滚动数组优化一维空 ...

  6. HDU-6333 Problem B. Harvest of Apples 莫队

    HDU-6333 题意: 有n个不同的苹果,你最多可以拿m个,问有多少种取法,多组数据,组数和n,m都是1e5,所以打表也打不了. 思路: 这道题要用到组合数的性质,记S(n,m)为从n中最多取m个的 ...

  7. poj 3026 Borg Maze(最小生成树+bfs)

    题目链接:http://poj.org/problem?id=3026 题意:题意就是从起点开始可以分成多组总权值就是各组经过的路程,每次到达一个‘A'点可以继续分组,但是在路上不能分组 于是就是明显 ...

  8. Ubuntu开机出现grub指令,无法正常开机

    问题 最近开机出现了如下的界面: 分析问题 首先看看GNU GRUB是什么东东?干什么用的? GNU GRUB是多重引导加载程序.通俗点说,它就是用来一个可以让你选择运行什么操作系统的程序. 在你开机 ...

  9. 【Nginx】实现负载均衡的几种方式

    要理解负载均衡,必须先搞清楚正向代理和反向代理. 注: 正向代理,代理的是用户. 反向代理,代理的是服务器 什么是负载均衡 当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能 ...

  10. SpringBoot 参数校验的方法

    Introduction 有参数传递的地方都少不了参数校验.在web开发中,前端的参数校验是为了用户体验,后端的参数校验是为了安全.试想一下,如果在controller层中没有经过任何校验的参数通过s ...