• Flask06,cookie,session,flask-session


    1. cookie的使用

    1.设置cookie(django 的cookie是通过responser来存放的,flask也是)
        response = make_response(render_template('index.html'))
        
        response.set_cookie('key', 'value')
    
    2.查询cookie:
        user_name = request.cookies.get('user_name')
        
    3.删除cookie:
        response.delete_cookie('key')
    
    注意:Flask服务器默认设置cookie有效期为关闭浏览器后cookie失效
    参数:  
        key, 键
        value='', 值
        max_age=None, 超时时间 cookie需要延续的时间(以秒为单位)如果参数是 None`` ,这个cookie会延续到浏览器关闭为止
        expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
        path='/', Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问,浏览器只会把cookie回传给带有该路径的页面,这样可以避免将cookie传给站点中的其他的应用。
        domain=None, Cookie生效的域名 你可用这个参数来构造一个跨站cookie。如, domain=".example.com"所构造的cookie对下面这些站点都是可读的:www.example.com 、 www2.example.com 和an.other.sub.domain.example.com 。如果该参数设置为 None ,cookie只能由设置它的站点读取
        secure=False, 浏览器将通过HTTPS来回传cookie
        httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖
    

    1.2设置Cookie过期时间

    1.基于max_age参数设置cookie有效期:
        resp = Response('设置cookie给浏览器')
        resp.set_cookie('user_name', 'mark',max_age=60)
    2.基于expires参数设置cookie有效期:
        再设置cookie的调用set_cookie()时候传入关键字实参 expires= 值,这个值代具体的过期时间,一个datetime对象或UNIX时间戳。
        使用expires参数,就必须会用格林尼治时间(也就是相对北京时间少8个小时,因为浏览器会默认把服务器传来的时间值当做标准格林尼治时间,并根据当地的时区做调整 
        resp = Response('设置cookie给浏览器, cookie设置过期时间为一个月后')
        expires = datetime.now()+timedelta(days=30, hours=16)
        resp.set_cookie('user_name', 'mark', expires=expires)
    

    2 session的使用

    from flask import session
    使用前必须要设置app.config['SECRET_KEY'] = xxxxxxxxxxxxxxxxxxxxxxx
    1.设置
    	session['key']=value
    2.取
    	session['key']
    3.删除
        session对象调用pop(key)可以根据具体的session的key清除掉指定的session信息。	
    	session对象调用clear()可以清除此次请求的浏览器关于本域名的所有session信息
    
    

    2.2 session过期时间

    后端Flask跟浏览器交互默认情况下,session cookie会在用户关闭浏览器时清除。通过将session.permanent属性设为True可以将session的有效期延长为31天,也可以通过操作app的配置PERMANENT_SESSION_LIFETIME来设置session过期时间

       1. session['userphone'] = '123456'
          session.permanent = True
       2. app 配置 通过设置PERMANENT_SESSION_LIFETIME指定具体的过期时间
         from datetime import timedelta
         app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=1) # 设置为1小时候过
    

    3. flask-session

    作用:将默认保存的签名cookie中的值 保存到 redis/memcached/file/Mongodb/SQLAlchemy

    安装:pip3 install flask-session

    使用1:

    from flask import Flask,session
    from flask_session import RedisSessionInterface
    import redis
    app = Flask(__name__)
    conn=redis.Redis(host='127.0.0.1',port=6379)
    #use_signer是否对key签名
    app.session_interface=RedisSessionInterface(conn,key_prefix='lqz')
    @app.route('/')
    def hello_world():
        session['name']='lqz'
        return 'Hello World!'
    
    if __name__ == '__main__':
        app.run()
    

    使用2:

    from redis import Redis
    from flask.ext.session import Session
    app.config['SESSION_TYPE'] = 'redis'
    app.config['SESSION_REDIS'] = Redis(host='1127.0.0.1',port='6379')
    Session(app)
    

    问题:设置cookie时,如何设定关闭浏览器则cookie失效。

    response.set_cookie('k','v',exipre=None)#这样设置即可
    #在session中设置
    app.session_interface=RedisSessionInterface(conn,key_prefix='lqz',permanent=False)
    #一般不用,我们一般都设置超时时间,多长时间后失效
    

    问题:cookie默认超时时间是多少?如何设置超时时间

    #源码expires = self.get_expiration_time(app, session)
    'PERMANENT_SESSION_LIFETIME':       timedelta(days=31),#这个配置文件控制
    
    永远不要高估自己
  • 相关阅读:
    Boost Log : Log record formatting
    Boost Log : Attributes
    PLSA的EM推导
    特征处理:一点经验
    海量推荐系统:mapreduce的方法
    操作系统之存储器管理
    maredit测试
    算法:链表
    c++特别要点:多态性与虚函数
    sizeof的用法与字节对齐
  • 原文地址:https://www.cnblogs.com/liqiangwei/p/14408687.html
Copyright © 2020-2023  润新知