当我从 Ajax (jQuery) 发送请求时,会话在 Flask 代码中不起作用

sol*_*... 5 ajax session jquery flask

在用户登录他的帐户后,我在烧瓶(python 框架)中使用用户的电子邮件 ID创建了一个会话。好的,它的工作正常,并且在我交叉检查时创建了会话。它的网址是. 但是,当用户从浏览器单击注销按钮时,我发现会话不起作用..(我不知道,虽然我在登录时创建了会话)。"http://localhost:5000/login"

我的 ajax 代码在apache2 服务器上"http://localhost:80/index.html".

当我使用curl交叉检查时,它工作正常。但是,在浏览器的情况下,当我单击注销按钮时,我在终端(ubuntu)上发现了一条消息,表明您的会话已过期,这是我在登录时创建的。

在这里,Ajax代码登录的一部分的index.html

// Login ajax python
            $("#btn_login").click(function(){
                var txt1 = $("#txt1").val();
                var txt3 = $("#txt3").val();
                console.log("text: ", txt1, txt3);
                var a = {"username": txt1, "password": txt3, "type": "login"};
                $.ajax(
                    {
                        url: "http://localhost:5000/login",
                        type: "POST",
                        headers: {"Content-Type": "application/json"},
                        data: JSON.stringify(a),
                        dataType: "json",
                        success: function(response) {
                            console.log("Response from Python: ", response);
                            var output = response.result;
                            $("#show_msg").html("Mengego says: " + output.message + " " + output.user);
                        },
                        error: function(err) {
                            console.log("error: " + err);
                        }
                    }
                );
            });
Run Code Online (Sandbox Code Playgroud)

下面是Ajax代码注销的一部分的index.html

// Logout 
            $("#logout").click(function(){
                $.ajax(
                    {
                        url: "http://localhost:5000/logout",
                        type: "POST",
                        headers: {"Content-Type": "application/json"},
                        success: function(response) {
                            console.log("Response from Python: ", response);
                            var output = response.result;
                            $("#show_msg").html("Output of Logout: " + output.message);
                        },
                        error: function(err) {
                            console.log("error: " + err);
                        }
                    }
                );
            });
Run Code Online (Sandbox Code Playgroud)

下面是瓶代码登录的一部分“user.py”

@user_api.route("/login", methods=['POST'])

def login():

    returning_data = {}
    try:
        form_params = request.json
        username = form_params["username"]
        password = form_params["password"]
        sql = "SELECT username, password FROM user WHERE username = '" + username + "' AND password = '" + password + "'"
        results = obj_connect.executeFetch(sql)
        if len(results) == 0:
           returning_data = { "message": "You enter incorrect username or password..", "user": []}
        else:
           sql = "SELECT email FROM user WHERE username = '" + username + "' AND password = '" + password + "'"
           results = obj_connect.executeFetch(sql)
           # session creation 
           session['email'] = results[0][0]
           print "session key is ", session['email']
           print "session is ", session
           session.permanent = True
           returning_data = { "message": "Welcome!!!...", "user": username}
    except Exception:
        print traceback.format_exc()
        returning_data = { "message": "Error during Login" }
    return jsonify({"result": returning_data})


Below is flask code for logout part of **"user.py"**

@user_api.route("/logout", methods=['POST'])
def logout():
    print "ses", session
    returning_data = {}
    try:
        if 'email' in session:
            print "your session is alive"
        else:
            print "your session expired"
        session.clear()
        if 'email' in session:
            print "your session is still alive"
        else:
            print "your session already expired"
        returning_data = { "message": "You are Logout Now...." }
    except Exception:
        print traceback.format_exc()
        returning_data = { "message": "Failure in Logout" }
    return jsonify({"result": returning_data})
Run Code Online (Sandbox Code Playgroud)

现在,在上面用于注销部分的烧瓶代码中,当我从浏览器单击注销按钮时,我在终端(ubuntu)上得到了以下输出......

当前错误输出:

your session expired
your session already expired
Run Code Online (Sandbox Code Playgroud)

预期输出:

your session is alive
your session already expired
Run Code Online (Sandbox Code Playgroud)

请帮我这个..

Bra*_*Deo 0

您应该将信息存储在 Flask 全局对象中,以在每个请求的整个生命周期中保留信息,并在请求对象中存储每个请求发送的信息。

from flask import g, request
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以检查g对象上的值(因为它是字典),然后根据设置的值登录/注销。

例如: g.session = "session key"当您登录时,然后g.session = None当您注销时。

注意:这假设您在处理请求之前检查数据库中的登录凭据或 Flask 应用程序中的某些设置值。