flask cookie\session

来源:互联网 发布:java输出unicode字符 编辑:程序博客网 时间:2024/05/18 03:42

flask cookie\session

1.cookie

1.1 什么是cookie

Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。
由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

1.2 cookie机制

在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆。例如,用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。
而Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。要跟踪该会话,必须引入一种机制。
Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话。

1.3 flask中使用cookie

cookie的设置是必须在response返回时,并且是作为response的一部分给client端返回的
1.3.1 通过set_cookie设置cookie

@app.route('/set_cookie')def set_cookie():    response=make_response('Hello World')    """设置cookie的有效时长"""    outdate=datetime.datetime.today() + datetime.timedelta(days=30)    response.set_cookie('Name','test',expires=outdate)    return response

PS:浏览器也可以设置cookie有效时长且优先级比coding高
1.3.2 通过request.cookies()获取cookie

@app.route('/get_cookie')def get_cookie():    name=request.cookies.get('Name')    return name

1.3.3 删除cookie

"""方法一:通过在浏览器中设置来清除cookie""""""方法二:使用Response的set_cookie进行清除"""@app.route('/del_cookie')def del_cookie():    response=make_response('delete cookie')    response.set_cookie('Name','',expires=0)    return response"""方法三:使用Response的 delete_cookie方法"""@app.route('/del_cookie')def del_cookie():    response=make_response('delete cookie')    response.delete_cookie('Name')    return response

2.session

2.1 什么是session

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了

2.2 session机制

Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。

2.3 flask中使用session

设置session

@app.route('/login',methods=['POST','GET']) def login():     if request.method == 'POST':     username = request.form['username']     session['username'] = username     return redirect(url_for('/index'))     return  '''     <form action='/login' method='POST'>     <input name='username' />     <input type='submit' value='submit' />     </form>     '''

使用session

@app.route('/index') def index():     if 'username' in session:     username = session['username']     return 'welcome {0}'.format(username)     else:     return 'please you login'

删除session

@app.route('/logout') def logout():     session.pop('username',None)#字典的方法相似     return redirect(url_for('/index'))

3.SECRET_KEY

Session, Cookies以及一些第三方扩展都会用到SECRET_KEY值,这是一个比较重要的配置值,应该尽可能设置为一个很难猜到的值,随机值更佳。
PS:如果遇到了 Must provide secret_key to use csrf错误提醒,原因就是没有设置secret_key

原创粉丝点击