【发布时间】: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.html 的 login 部分
// 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
请帮帮我..
【问题讨论】: