• flask框架基本使用(3)(session与cookies)


    #转载请留言联系

    flask 框架基本使用(1):https://www.cnblogs.com/chichung/p/9756935.html

    flask 框架基本使用(2):https://www.cnblogs.com/chichung/p/9761610.html

    本文主要记录下在flask 框架下如何使用 cookie 与 session。

    首先要明白几个概念。

    • 状态保持

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

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

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

    有时需要保持下来用户浏览的状态,比如用户是否登录过,浏览过哪些商品等

    实现状态保持主要有两种方式:

    在客户端存储信息使用Cookie

    在服务器端存储信息使用Session

    • 会话

    会话,英文“session”,表示从用户访问我们当前访问开始,一直到用户关闭浏览器这个过程,就是一次会话,表示用户与当前网站之间进行了一次会话。

    会话的开始:用户第一次访问当前网站

    会话的结束:用户关闭浏览器

    会话跟踪,也叫状态保持,主要目的就是为了识别每一次访问到我们网站页面的用户的行为。

    1. flask 框架下使用 cookie

    • cookie 是什么?

    (1) cookie 指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地的数据(通常经过加密)。

    (2) cookie 是由服务器端生成,发送给客户端浏览器,浏览器会将 cookie 的 key/value 保存,下次请求同一网站时就发送该cookie 给服务器(前提是浏览器设置为启用 cookie )。

    (3) cookie 是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息如密码,因为电脑上的浏览器可能被其它人使用。

    (4) cookie 基于域名安全,不同域名的 cookie 是不能互相访问的。

    (5) 当浏览器请求某网站时,会将本网站下所有 cookie 信息提交给服务器,所以在 request 中可以读取 cookie 信息

    • cookie的应用

    (1)最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookie的功用。

    (2)网站的广告推送,经常遇到访问某个网站时,会弹出小窗口,展示我们曾经在购物网站上看过的商品信息。(跨域)

    from flask import Flask,make_response,request
    
    app=Flask(__name__)
    
    #设置cookie
    @app.route("/login")
    def login():
        respond = make_response("登录成功")
        respond.set_cookie("islogin","1")
        #此处可以设置时间,例如respond.set_cookie("username","chichung",10),
        #表示10s后浏览器自动删除这个cookie,如果不设置时间就是管理浏览器时清除cookie
        respond.set_cookie("username","chichung")
        return respond
    
    #使用cookie
    @app.route("/center")
    def center():
        if request.cookies.get("islogin") == "1":
            username = request.cookies.get("username")
            return "%s的个人中心"%username
        else:
            return "没有登录"
    
    #删除cookie
    @app.route("/logout")
    def logout():
        respond = make_response("登出成功")
        #删除cookie,就是把cookie的有效期设置为0秒
        respond.set_cookie("islogin","",0)
        respond.set_cookie("username","",0)
        # 设置cookie必须通过response返回,否则无法设置成功
        return respond
        
    if __name__ == '__main__':
        app.run(debug=True)

     

    2. flask 框架下使用 session

    • session是什么?

    session 依赖于 cookie ,原理与 cookie 基本类型,但是 session 是保存在服务端的。

    对于敏感、重要的信息,建议要存储在服务器端,不能存储在浏览器中,如用户名、余额、等级、验证码等信息。

    拓展:

    上面的例子用 cookies 保存着登录状态与用户名,这是什么危险的。一旦遇到会一点JS的人用了你的电脑,document.cookie="islogin=1",document.cookie="username=你的用户名",就可以登录你的主页了。

    from flask import Flask,session
    
    app=Flask(__name__)
    app.secret_key="hdjkewqhuirhqw4e3ibr5iu432y895&^*%(7680"    #必须要写secret_key,内容可以乱填
    
    #设置session
    #session是保存在服务器中的,所以session本身的有效期就是会话期,即第一次请求到关闭浏览器这段期间
    @app.route("/login")
    def login():
        session["islogin"]="1"
        session["username"]="chichung"
        return "登录成功"
    
    #使用session
    @app.route("/center")
    def center():
        if session.get("islogin") == "1":
            return "%s的个人中心"%session.get("username")
        else:
            return "没有登录"
    
    #删除session
    @app.route("/logout")
    def logout():
        session["username"]=None
        session["islogin"]=None
        return "登出成功"
    
    if __name__ == '__main__':
        app.run()
  • 相关阅读:
    JavaScript实现常见排序算法
    执行环境与作用域
    几种常见的三列布局,中间自适应,两边定宽
    常见的两列布局
    CodeAtlas For Sublime Text
    增加调用路径查找
    增加调用被调用个数隐喻
    sublime 插件
    分析大工程
    Jmeter 分布式测试
  • 原文地址:https://www.cnblogs.com/chichung/p/9762897.html
Copyright © 2020-2023  润新知