当前位置:   article > 正文

【Flask框架】——19 Session_flask session id

flask session id

在这里插入图片描述

在这里插入图片描述


1.session介绍

Session:与cookie功能效果相同。

SessionCookie的区别在于Session是记录在服务端的,而Cookie是记录在客户端的。

  当访问服务器某个网页的时候,会在服务器端的内存里开辟一块内存,这块内存就叫做session,而这个内存是跟浏览器关联在一起的。这个浏览器指的是浏览器窗口,或者是浏览器的子窗口,意思是,只允许当前这个session对应的浏览器访问,就算是在同一个机器上新启的浏览器也是无法访问的。而另外一个浏览器也需要记录session的话,就会再启一个属于自己的session

在这里插入图片描述

如何知道浏览器和这个服务器中的session是一一对应的呢?又如何保证不会去访问其它的session呢?

  当访问一个页面的时候给浏览器创建一个独一无二的号码,也给同时创建的session赋予同样的号码。这样就可以在打开同一个网站的第二个页面时获取到第一个页面中session保留下来的对应信息(理解:当访问第二个页面时将号码同时传递到第二个页面。找到对应的session)。这个号码也叫sessionID(签名),sessionID号码或者签名是独一无二的。

session的两种传递方式:

第一种通过cookies实现。

  当客户端进行第一次请求时,客户端的HTTP requestcookie为空)到服务端,服务端创建session,视图函数根据form表单填写session,请求结束时,session内容填写入responsecookie中并返回给客户端,客户端的cookie中便保存了用户的数据。

第二种通过URL重写来实现。

  当同一客户端再次请求时, 客户端的HTTP requestcookie已经携带数据,此时cookies不为空, 获取cookie的有效时长,如果cookie依然有效,通过与写入时同样的签名算法将cookie中的值解密出来,若cookie已经失效,则返回空。 再根据解密出来的内容判断服务器中是否存在对应的值。

注意:在FlaskSession的签名算法是:HMACSHA1算法。


2.Session操作步骤

  • 设置SECRET_KEY
import os


class DefaultConfig(object):
    SECRET_KEY = os.urandom(16)


app.config.from_object(DefaultConfig)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 设置session
from flask import session


@app.route('/session')
def setSession():
    # 设置session
    session['username'] = 'sanHa'
    session['password'] = 'root'
    return 'set session ok'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

  • 读取session
from flask import session


# 读取session
@app.route('/get')
def getSession():
    username = session.get('username')
    password = session.get('password')
    return 'username:{}, password:{}'.format(username, password)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述


3.session处理自定义对象

from flask.json import JSONEncoder  # JSONEncoder默认不支持把自定义对象变成JSON格式


# 自定义一个JSONEncode
class MyJSONEncode(JSONEncoder):
    # 重写default方法
    def default(self, obj):
        # 若果对象是user类型,转换为JSON格式
        if isinstance(obj, User):
            return {
                'un': obj.un,
                'pwd': obj.pwd
            }
        else:  # 其它不是User类型的默认交给JSONEncoder处理
            JSONEncoder.default(obj)


# 设置当前JSONencode
app.json_encoder = MyJSONEncode


# 自定义实例类
class User(object):
    def __init__(self, un, pwd):
        self.un = un
        self.pwd = pwd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
# 设置session
@app.route('/session')
def setSession():
    session['user'] = User('root', 'root')
    return 'set session ok'
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

# 读取session
@app.route('/get')
def getSession():
    user = session.get('user')
    print(user)
    return '读取session成功'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

在这里插入图片描述


4.设置session时长

注意:session的默认有效时间是:浏览器关闭后失效。

通过session.permanent = True设置session的有效时间为31天。
在这里插入图片描述


设置session(会话)有效时长为30分钟

# 默认配置
class DefaultConfig(object):
    # 设置session(会话)有效时长为30分钟
    PERMANENT_SESSION_LIFETIME = datetime.timedelta(minutes=30)


# 注册
app.config.from_object(DefaultConfig)


@app.route('/session')
def setSession():
    # 设置session
    session.permanent = True
    return 'set session ok'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

session时长设置成功
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/540535
推荐阅读
相关标签
  

闽ICP备14008679号