当前位置: 首页 > 知识库问答 >
问题:

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

韦熙云
2023-03-14

在用户登录其帐户后,我在flask(python框架)中创建了一个会话,其中包含用户的电子邮件id。好的,它的工作很好,会话在我交叉检查时创建。它的url是”http://localhost:5000/login“。但是,当用户从浏览器中单击“注销”按钮时,我发现会话不起作用。。(我不知道,尽管我在登录时创建了会话)。

我的ajax代码作为apache2服务器上运行。”http://localhost:80/index.html“

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

这里,Ajax代码是登录索引的一部分。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);
                        }
                    }
                );
            });

下面是index.html注销部分的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”登录部分的代码

@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})

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

电流输出错误:

your session expired
your session already expired

预期产出:

your session is alive
your session already expired

请帮帮我...

共有2个答案

贲招
2023-03-14

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

东门修能
2023-03-14

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

from flask import g, request

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

例如:登录时g.session=会话密钥,退出时g.session=无。

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

 类似资料:
  • 问题内容: 我在我的网站上做了一些非常基本的jQuery ajax的工作,并且遇到了很多麻烦。 以下是相关代码: 该页面是通过HTTPS加载的,但是XMLHttpRequests似乎是通过HTTP输出的。 我甚至尝试将URL更改为绝对URL(https://larsendt.com/jsontest/randomdata),它 仍然 将请求发送到我的站点的HTTP版本。 自然,由于请求将转到其他协

  • 我不明白为什么创建对象的请求不再有效。我用mysql和sequelize创建模型。 我为每个请求填写用户的令牌,进行连接,检索他的个人资料,从数据库中检索所有文章,它工作了,但现在我不能再创建任何文章。 我做了控制台.log(req.body)我的函数,但我有这个:{}。我的函数从我的第一个条件给了我一个400错误。当我发送请求时,在VSC上,我有“ 代码:'ERR_HTTP_HEADERS_SE

  • 问题内容: 我在JSF2中使用PrimeFaces。我正在尝试通过将登录名和密码作为Ajax请求发送来对用户进行身份验证。在备用bean的操作方法中,我尝试验证用户,如果验证成功,则重定向到新视图。 使用primefaces可以吗? 因为我认为使用primefaces’ ,所以我只能具有ajax行为或导航。 问题答案: 是的,仅发送重定向而不是(默认)转发作为结果。该稀少JSF 2.0的方式将被追

  • 问题内容: 通过站点登录后,我尝试向该站点发送第二个请求- 但是,当我检查使用FireBug发送的标头时,请求中不包含会话cookie。 我究竟做错了什么? 问题答案: 如果您要调用的URL与您的调用脚本位于同一域中,则AJAX调用仅发送Cookie。 这可能是跨域问题。 也许您是在调用脚本打开时尝试从url 调用的(换句话说:您进行了跨域调用,在这种情况下,浏览器将不会发送任何cookie来保护

  • 如何使用dataTables实例化不加载数据的表(服务器模式),然后在单击按钮时加载数据。如果serverSide在初始化时设置为true,则表将自动发送ajax请求,然后呈现数据,这不是我想要的(

  • 交互过程中,发送请求是第一步。那么,我们将如何构造一个请求呢? 这一章节,我们将一步一步来构建一个 Ajax 请求。学习本节,你将学会: 如何通过 XMLHttpRequest 和 ActiveXObject 来构造一个通用的 xhr 对象。 如何通过 xhr 对象来发送 GET、 POST 等请求。 Content-type 在 Ajax 数据发送中的作用。 那么,接下来让我们进入本节的学习吧。