flask 中 session 和cookie的使用(二)

session:

session技术  也叫 会话技术。

1. session的基本概念:

     session和cookie的作用有点类似,都是为了存储用户相关的信息,都是为了解决http协议无状态的这个特点。不同的是,cookie信息是存储在客户端,而session信息是存储在服务器端。

     需要注意的是,不同的语言,不同的框架,有不同的实现。虽然底层的实现不完全一样,但目的都是让服务器端能方便的存储数据而产生的。

     session的出现,是为了解决cookie存储数据不安全的问题的。

2. session的跟踪机制跟cookie有关:

  • session跟踪机制跟cookie有关,所以,要分服务器端客户端分别起到什么功能来理解。

    * session工作过程:

服务器端可以采用类似于mysql、redis等技术来存储session信息。

原理是,客户端发送验证信息过来(比如用户名和密码),服务器验证成功后,

把用户的相关信息存储到服务器端的session中(可想象为一个容器),

再通过盐的机制,盐起到混淆原数据的作用(类似于加密),

然后随机生成一个唯一的session_id,用来标识(用户名和密码)并存储到session中,

之后再把这个session_id存储到cookie中返回给浏览器。

浏览器以后再请求我们服务器的时候,就会把这个session_id通过Cookie技术自动的发送给服务器,

服务器端再从cookie中提取session_id,然后从服务器的session容器中找到这个用户的相关信息。

这样就可以达到安全识别用户的需求了。

存储在服务器的数据会更加的安全,不容易被窃取。

但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的。

        

       *服务器端功能:

        1.把用户的相关信息存储到服务器端的session中

        2.通过盐的机制加密随机生成一个唯一的session_id,用来标识用户相关信息并将session_id也存入session中

        3.把session作为cookie的key,session_id作为cookie的value创建cookie信息并返回给客户端

        4.客户端发送第二次以后的请求时,获取cookie信息,与服务器端session容器中session_id对比,得出指定  用户信息。

    * 客户端功能:

         1.通过cookie存储session加密后的session_id信息

         2.以后浏览器再请求服务器的时候,就会自动的把cookie信息(包含session_id)发送给服务器

Flask操作session:

1. 设置session:

通过`flask.session`就可以操作session了。操作`session`就跟操作字典是一样的。

session['uname']='zhangsan'

2. 获取session:

  也是类似字典,

  

session.get(key)

3. 删除session中的值:

  也是类似字典。可以有2种方式删除session中的值。

    * session.pop(key)。

    * session.clear():删除session中所有的值。

4. 设置session的有效期:

 如果没有设置session的有效期。那么默认就是浏览器关闭后过期。

 如果设置session.permanent=True,那么就会默认在31天后过期。

 如果不想在31天后过期,按如下步骤操作

1:

session.permanent=True

2:可以设置`app.config['PERMANENT_SESSION_LIFETIME'] =   timedelta(hour=2)`在两个小时后过期。

代码如下

from flask import Flask,session
from datetime import datetime,timedelta
import os
app = Flask(__name__)
#  第一步
app.config['SECRET_KEY']=os.urandom(16)   # 生成yan   加密
app.config['PERMANENT_SESSION_LIFRRTIME'] = timedelta(hours=8)
@app.route('/')
def index():
    # 第二步  设置session
    session['name']='riven'
    session['pwd']='123'
    # 获取session
    session.get('pwd')
    session.get('name')
    # 删除session中的值  两种方法
    session.clear()  # 删除session中所有的值
    session.pop('pwd') # 删除指定的的值
    # session 的有效期
    session.permanent = True   # 第一种  session 的有效期为31天
    """  
    session.permanent = True
    app.config['PERMANENT_SESSION_LIFRRTIME'] = timedelta(hours=8)    设置两个小时后过期
    """




    return '123'


if __name__=='__main__':
    app.run()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

allen wy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值