查看浏览器请求的session 浏览器怎么查看session_查看浏览器请求的session


1.session介绍

Session:与cookie功能效果相同。

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

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

查看浏览器请求的session 浏览器怎么查看session_flask_02

如何知道浏览器和这个服务器中的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)
  • 设置session
from flask import session


@app.route('/session')
def setSession():
    # 设置session
    session['username'] = 'sanHa'
    session['password'] = 'root'
    return 'set session ok'

查看浏览器请求的session 浏览器怎么查看session_后端_03

  • 读取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)

查看浏览器请求的session 浏览器怎么查看session_flask_04


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
# 设置session
@app.route('/session')
def setSession():
    session['user'] = User('root', 'root')
    return 'set session ok'

查看浏览器请求的session 浏览器怎么查看session_客户端_05

# 读取session
@app.route('/get')
def getSession():
    user = session.get('user')
    print(user)
    return '读取session成功'

查看浏览器请求的session 浏览器怎么查看session_客户端_06

查看浏览器请求的session 浏览器怎么查看session_后端_07


4.设置session时长

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

通过session.permanent = True设置session的有效时间为31天。

查看浏览器请求的session 浏览器怎么查看session_flask_08


设置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'

session时长设置成功

查看浏览器请求的session 浏览器怎么查看session_查看浏览器请求的session_09