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),#这个配置文件控制
永远不要高估自己
原文地址:https://www.cnblogs.com/liqiangwei/p/14408687.html