【发布时间】:2019-07-16 05:04:26
【问题描述】:
我正在 PHP 中创建一个用户输入用户名的登录页面。如果用户名是有效的,用户将被重定向到另一个页面,在那里他们使用的用户名被打印出来。如果用户名无效,页面会提示他们输入有效的用户名并重新加载页面。
我的问题在于将有效的“用户名”变量从登录页面“发布”到用户被重定向到的页面。
我知道在我的登录页面的表单标签中,我可以输入:
<form action='pageToPostTo.php' method='POST'>
</form>
但是,我的问题是,一旦用户点击提交,这似乎总是重定向到 pageToPostTo.php。结果,如果用户名无效,我不知道如何避免这种重定向。
相反,我使用 jQuery 的“.ready”和“.click”来执行 javascript 代码,在用户单击“提交”时验证用户名是否有效。如果它有效,则调用 Ajax 的“POST”方法。如果无效,则登录页面提示并重新加载。
function isValid(username) {
return true;
}
$(document).ready(function () {
$('input#submit').click(function (event) {
event.preventDefault();
if(isValid(username.value)) {
postUser();
}
else {
alert("Invalid Username");
location.reload();
}
});
});
postUser() 如下图:
function postUser() {
var username = username.value;
$.ajax({
url: 'pageToPostTo.php',
type: 'POST',
data: {getUsername: username}, // username = "danny"
success: function(response) {
alert(response); // Outputs: "Your username is: danny"
window.location.href = 'pageToPostTo.php'; // Outputs: "Your username is: Notice: Undefined index: getUsername..."
}
});
}
我的 Ajax 帖子对象的“成功”函数中的 “alert(response)”正确评估了 $_POST['getUsername']。这表明我的 Ajax 帖子运行良好。
这是我的问题所在:一旦我重定向到 pageToPostTo.php,$_POST['getUsername'] 就会停止评估,而是返回“通知:未定义索引:getUsername”。
Ajax 的“发布”方法似乎有效,但重定向缺少 Ajax“发布”的内容。
有没有办法在Ajax“post”方法执行后重定向到“pageToPostTo.php”,这样重定向后,我可以用$_POST['getUsername']检索Ajax发布的内容?
如果不是,为什么不呢?我必须有哪些替代方案才能获得相同的功能?
以前我使用 localStorage.setItem("usernameStorage", username.value) 和 localStorage.getItem(...) 在 php 文件之间传输变量。这样做有什么缺点吗?
从我的 loginPage.php 中截取:
<form name="login">
<p>Username: <input type="text" id="username" ></p>
<input type="submit" id="submit">
</form>
pageToPostTo.php:
<?php
$validUser = $_POST['getUsername'];
echo "Your username is: " . $validUser;
?>
附:验证用户名是否有效的函数必须在 JavaScript 中。
【问题讨论】:
-
不要在客户端存储用户信息(本地存储、cookie 等)。阅读使用sessions 代替并让PHP 处理所有这些。如果客户端可以控制用户的身份识别,那么任何人都可能只是编辑 cookie 并以任何其他用户的身份登录。
-
另外,用户名是否有效的检查也应该在后端处理。请记住,任何访问您网站的人都可以操作您的任何 JS 代码。 从不信任来自客户端的数据,这意味着无论你在 JS 中验证多少数据,你也需要在后端进行验证。
-
@MagnusEriksson “后端”是指我需要检查用户名在 php 而不是 JavaScript 中是否有效,因为任何人都可以访问和编辑我的 JavaScript 代码,而在 php 中,验证用户名将无法访问?另外,感谢您的回复。我明白为什么不使用 localstorage/cookies 来存储,并且我将研究会话。
-
是的。这正是我的意思:-)
-
它可以使用 php 验证用户名并使用会话!谢谢@MagnusEriksson。
标签: javascript php jquery ajax post