cookie和session
cookie:网站中,http请求是无状态的,第一次和服务器连接后并且登陆成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是解决了改问题,第一次登陆后服务器返回数据(cookie是存储数据的一种格式)给浏览器,然后浏览器保存到本地,用户第二次请求的时候,就会携带cookie数据自动携带给服务器,服务器通过浏览器携带的数据就能判断当前用户。cookie存储数据有限,不同浏览器不同的存储大小,但一般不超过4kb,因此cookie只能存储小量数据。
session:session与cookie类似,都是存储用户相关信息,不同的是cookie存储在本地浏览器,session存储在服务器,存储在服务器的数据会更安全。但是存储在服务器会占用服务器的资源。
cookie和session的结合使用:
存储在服务端:通过cookie存储一个session_id,具体数据保存在session(存储数据的方式)中。用户如果已经登陆服务器会在cookie中保存一个session_id,下次请求的时候会把sessin_id携带上来,服务器根据session_id在session库中获取用户的session数据,就可以知道用户是谁。专业术语叫:sever side session
flask中将session数据加密,存储在cookie中,专业术语叫client side session。flask采用的就是这个方式。
flask中的session
flask中的session机制是:把敏感数据加密后放入session中,然后把session存放到cookie中,下次请求的时候,从浏览器发来的cookie中读取session,再从session中读取敏感数据,并进行解密,来获取用户数据
flask的这种session机制,可以节省服务器的开销,因为把所有的信息都存储到了客户端。
安全是相对的,把session放到cookie中,经过加密也是比较安全的。
flask中使用cookie和session
cookies:在flask中操作cookie,通过response对象来操作,可以在response返回之前,通过response.set_cookie来设置。

key:设置的cookie的key
value:key对应的value
max_age:改cookie的过期时间,如果不设置,浏览器关闭就会过期
expires:过期时间,应该是datetime类型
domain:该cookie在哪个域名中有效,一般设置子域名。
path:该cookie在哪个路径下有效
session:flask中的session是通过 from flask import session。然后添加key和value进去就可以。并且,flask中的session机制是将session信息加密,然后存储在cookie中。专业术语叫client side session

操作session
session的操作:
使用session需要从flask中导入session,以后所有和session相关的操作都是通过这个变量来的。
使用session需要设置SECRET_KEY,用来作为加密用的,并且这个SECRET_KEY在每次启动服务器后都变化的话,之前的session就不能通过SECRET_KEY来解密
操作session和操作字典一样。
添加session['username']
删除session.pop()
清除所有session.clear()
获取session.get()
设置session的过期时间
没有制定session的过期时间,默认是浏览器关闭就自动结束。
设置了session的permanent属性为True,那么过期时间是31天
可以通过给app.config设置PERMANENT_SESSION_LEFTTIME来更改时间,这个值的数据类型是datetime.timedelta类型

import os
from datetime import timedelta
import config app = Flask(__name__)
# app.config.from_object(config)
app.config['SECRET_KEY'] = os.urandom(24) # 做加密用的,加密一般是加密算法或者加盐
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 添加数据到session中
# 操作session的时候,跟操作字典一样
# SECRET_KEY @app.route('/')
def hello_world():
session['username'] = 'hubo'
# 不指定session的过期时间,默认是浏览器关闭就结束
session.permanent = True # 默认时间是一个月
return 'Hello World!' @app.route('/get/')
def get():
return session.get('username') @app.route('/delete/')
def delete():
print(session.get('username'))
session.pop('username')
print(session.get('username'))
return 'success' @app.route('/clear')
def clear():
print(session.get('username'))
session.clear()
print(session.get('username'))
return 'success' if __name__ == '__main__':
app.run(debug=True)

Flask中的session机制的更多相关文章

  1. Flask中的session ,自定义实现 session机制, 和 flask-session组件

    session 是基于cookie实现, 保存在服务端的键值对(形式为 {随机字符串:'xxxxxx'}), 同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的 时候验证: 注意 ...

  2. ECshop中的session机制理解

    ECshop中的session机制理解     在网上找了发现都是来之一人之手,也没有用自己的话去解释,这里我就抛砖引玉,发表一下自己的意见,还希望能得到各界人士的指导批评! 此session机制不需 ...

  3. 将 flask 中的 session 存储到 SQLite 数据库中

    将 flask 中的 session 存储到 SQLite 数据库中 使用 flask 构建服务器后端时,常需要在浏览器端存储 cookie 用于识别不同用户,根据不同的 cookie 判断出当前请求 ...

  4. PHP中的SESSION机制

    [转] php中cookie和session是我们常用的两个变量了,一个是用户客户端的,一个用在服务器的但他们的区别与工作原理怎么样,下面我们一起来看看cookie和session机制原理吧.   c ...

  5. Flask中的session和cookie以及日志

    一.笔记一session: 首先对于session在flask中应该是加密签名的cookie,所以要先生成secret_key app.secret_key = os.environ.get('SEC ...

  6. flask中的session cookie 测试 和 项目中的用户状态保持

    # -*- coding:utf-8 -*- # Author: json_steve from flask import Flask, current_app, make_response, req ...

  7. flask中cookie,session的存储,调用,删除 方法(代码demo)

    # -*- encoding: utf-8 -*- # cookie,session的存储,调用,删除 from flask import Flask,make_response,request,se ...

  8. Flask中的session操作

    一.配置SECRET_KEY 因为flask的session是通过加密之后放到了cookie中.所以有加密就有密钥用于解密,所以,只要用到了flask的session模块就一定要配置“SECRET_K ...

  9. flask中利用session实现用户记住密码

    “记住密码”的实质,实际上就是把cookie的有效期设置的长一点,当用户没有选择记住密码时,cookie的有效期为会话结束,选择记住密码后,会根据服务器的设置延长cookie的有效期,默认是31天.在 ...

随机推荐

  1. 2016.11.5初中部上午NOIP普及组比赛总结

    2016.10.29初中部上午NOIP普及组 这次比赛算是考的最差的一次之一了,当中有四分之三是DP. 进度: 比赛:没分+0+没分+40=40 改题:AC+0+没分+40=140 TurnOffLi ...

  2. ActiveMQ 知识点

    消息队列高可用 持久化,事务,签收,zookeeper+replicated-leveldb-store的主从集群 异步发送 同步发送: 明确指定同步发送 未使用事务的前提下,发送持久化消息(会使用同 ...

  3. ios与android设备即时语音互通的录音格式预研说明

    本文虽属原创,但是内容都是来自于网络,参考了大家的微博,以及论坛的总结. 在做语音对讲的时候,将会碰到录制语音格式的问题,因为要考虑自己开发设备的支持的格式,还要考虑其他设备操作系统的支持的格式,以及 ...

  4. Spring MVC(四)--控制器接受pojo参数

    以pojo的方式传递参数适用于参数较多的情况,或者是传递对象的这种情况,比如要创建一个用户,用户有十多个属性,此时就可以通过用户的pojo对象来传参数,需要注意的是前端各字段的名称和pojo对应的属性 ...

  5. 启用或禁用对 Exchange Server 中的邮箱的 POP3 或 IMAP4 访问

    https://docs.microsoft.com/zh-cn/Exchange/clients/pop3-and-imap4/configure-mailbox-access?view=exchs ...

  6. myeclipse工程更新后java图标变为空心的解决办法

    今天用svn更新了工程发现目录结构改变了,同时所有的java文件的图标变成了空心的.解决办法如下 1.右键单击工程目录名,选择properties. 2.选择java bulid path,正常的应该 ...

  7. mysql设置密码登录

    参考: https://blog.csdn.net/Light_Breeze/article/details/82070222 https://www.jianshu.com/p/d979df2791 ...

  8. 系统负载load

    一.查看系统负荷 如果你的电脑很慢,你或许想查看一下,它的工作量是否太大了. 在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行).(另外,它们在苹果公司的Mac电脑上也适用 ...

  9. Django项目:CRM(客户关系管理系统)--64--54PerfectCRM实现CRM客户报名链接

    # kingadmin.py # ————————04PerfectCRM实现King_admin注册功能———————— from crm import models #print("ki ...

  10. BZOJ 1933 [Shoi2007]Bookcase 书柜的尺寸

    神奇的dp优化. 考虑6维状态的dp,分别表示三行高和宽,显然MLE&&TLE. 把高排个序,从大到小往架上放,那么若不是重开一行便对高度没有影响. 然后求出宽度的sum,dp[i][ ...