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)
请帮我这个..
您应该将信息存储在 Flask 全局对象中,以在每个请求的整个生命周期中保留信息,并在请求对象中存储每个请求发送的信息。
from flask import g, request
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以检查g
对象上的值(因为它是字典),然后根据设置的值登录/注销。
例如:
g.session = "session key"
当您登录时,然后g.session = None
当您注销时。
注意:这假设您在处理请求之前检查数据库中的登录凭据或 Flask 应用程序中的某些设置值。