【问题标题】:Session not working in Flask code when I send request from Ajax (jQuery)当我从 Ajax (jQuery) 发送请求时,会话在 Flask 代码中不起作用
【发布时间】:2016-10-23 21:30:51
【问题描述】:

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

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

当我使用 curl 进行交叉检查时,它工作正常。但是,在浏览器的情况下,当我点击 logout 按钮时,我在 terminal (ubuntu) 上发现 您的会话已过期 的消息> 不过,我是在登录时创建的。

这里,Ajax 代码 用于 index.htmllogin 部分

// 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);
                        }
                    }
                );
            });

以下是 index.html

logout 部分的 Ajax 代码
// 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);
                        }
                    }
                );
            });

下面是 "user.py"

login 部分的 flask 代码
@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})

现在,在 logout 部分的 flask 的上述代码中,当我 click 时,我在 terminal (ubuntu) 上得到以下输出浏览器的注销按钮....

当前错误输出:

your session expired
your session already expired

预期输出:

your session is alive
your session already expired

请帮帮我..

【问题讨论】:

    标签: jquery ajax session flask


    【解决方案1】:

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

    from flask import g, request
    

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

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

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

    【讨论】:

      【解决方案2】:

      尝试在您的 Ajax 请求中包含以下选项:- optionxhrFields: { withCredentials: true }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        • 2012-04-07
        • 2020-10-19
        • 1970-01-01
        • 2017-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多