Javascript 通过AJAX将变量从$_会话发送到PHP以更改密码,如何操作?
我在我的web应用程序中为已经登录的用户设置了一个更改密码的选项(因此这不是忘记密码选项)。我有一个HTML表单,然后是用于表单验证的外部JS文件,如果输入的数据通过验证,则通过AJAX将输入的值发送到PHP脚本,然后还验证数据,如果一切正常,则更新数据库中的密码。我现在遇到的问题是,如何将用户ID从$\u SESSION变量传递到PHP脚本,该脚本通过用户ID在用户数据库中找到行并更改密码。我在网上搜索,没有找到我问题的好答案。我试图避免Javascript 通过AJAX将变量从$_会话发送到PHP以更改密码,如何操作?,javascript,php,mysql,session-variables,user-variables,Javascript,Php,Mysql,Session Variables,User Variables,我在我的web应用程序中为已经登录的用户设置了一个更改密码的选项(因此这不是忘记密码选项)。我有一个HTML表单,然后是用于表单验证的外部JS文件,如果输入的数据通过验证,则通过AJAX将输入的值发送到PHP脚本,然后还验证数据,如果一切正常,则更新数据库中的密码。我现在遇到的问题是,如何将用户ID从$\u SESSION变量传递到PHP脚本,该脚本通过用户ID在用户数据库中找到行并更改密码。我在网上搜索,没有找到我问题的好答案。我试图避免这个问题缺少对密码更改环境的描述 如果您要更改已通过身份
这个问题缺少对密码更改环境的描述
如果您要更改已通过身份验证的用户的密码,那么应该很简单
$user\u id=$\u会话['user\u id']代码>
因为用户已经登录,所以您必须在会话中的某个位置具有他的id。成功登录后,您可以将其存储在会话中,并根据需要命名
您不需要将用户id传递给HTML表单,您已经在会话中使用了它
如果要更改未经身份验证的用户的密码,则情况完全不同
现在许多网站通过电子邮件发送HTTP链接来访问“更改密码”页面。
在电子邮件中有一个特殊的链接来重置密码;该链接包括为用户发出的特定密码请求生成的临时UUID(在您选择的时间段内到期)。UUID与请求密码重置的用户的用户id一起存储在数据库中
当用户单击链接时,该链接将发送到接收UUID的页面。由于UUID,您可以检索请求密码重置的用户id,并在密码重置后立即删除UUID
当然,还有其他方法可以实现密码重置机制,但这是网络上最简单、最常见的方法。我更新了这个问题。我正在尝试为已经通过身份验证的用户创建一个选项。因此,逻辑是:1)用户登录,2)他/她转到他/她的profil页面,3)在列出的用户数据中,有一个指向“更改密码”页面的链接,4)用户单击此链接,5)页面打开(HTML代码启动),6)用户更改密码。我不知道如何从此页面获取$\u会话[“userid”]
,并将其发送到我的外部JS文件。好的,这不会更改我的答复。当用户登录时,您在$\u会话中将其用户id存储在何处?我重复一遍,您不需要将用户id传递给HTML表单,您已经在会话中使用了它。当您发布密码的HTML表单时,会话\u start()之后的$\u会话仍然存在,并且它包含您正在搜索的用户id;我决定使用``var userId=“”
<?php
include_once "./includes/header.php";
?>
<!-- MAIN PAGE CONTENT -->
<main>
<div class="main-content">
<div class="page-title">
<h1>Change password</h1>
</div>
<div class="page-content">
<div class="page-subcontent-wrapper">
<div class="page-subcontent-section">
<form id="js-change-password-form" class="change-user-password-wrapper" method="POST" action="" autocomplete="off" accept-charset="UTF-8" novalidate>
<div class="change-user-password">
<div class="change-user-password-element">
<label for="js-change-password-input">New password:</label>
<div id="js-change-password-display" class="password-display hide-password"></div>
</div>
<div class="change-password-input-wrapper">
<input id="js-change-password-input" type="password">
<div id="js-change-password-message" class="validation-message-div"></div>
</div>
</div>
<div class="change-user-password">
<div class="change-user-password-element">
<label for="js-change-password-confirm-input">Confirm password:</label>
<div id="js-change-password-confirm-display" class="password-display hide-password"></div>
</div>
<div class="change-password-input-wrapper">
<input id="js-change-password-confirm-input" type="password">
<div id="js-change-password-confirm-message" class="validation-message-div"></div>
</div>
</div>
<div class="change-user-password-button">
<button id="js-change-password-button" type="submit">Submit</button>
</div>
</form>
<div class="change-user-password">
<div class="change-user-password-message-success">
</div>
</div>
</div>
</div>
</div>
</div>
<script src="./js/change_password.js">
</script>
</main>
<?php
include_once "./includes/footer.php";
?>
$(document).ready(function(){
// Password validators
$("#js-change-password-form").submit(function(e){
var changePasswordValue = $("#js-change-password-input").val();
var changePasswordValueLength = changePasswordValue.length;
var changePasswordConfirmValue = $("#js-change-password-confirm-input").val();
var userId = $("#js-user-id-input").val();
e.preventDefault();
if (changePasswordValueLength < 8) {
var errorMessage = "<div class='error-message error-pointer'><p>Password should have at least 8 characters.</p></div>";
$("#js-change-password-message").html(errorMessage);
$(".validation-message-div").css("display", "flex");
$("#js-change-password-input").css("border-color", "rgb(190,115,110)");
} else {
var errorMessage = "<div class='success-message'><p>Looking good!</p></div>";
$("#js-change-password-message").html(errorMessage);
$(".validation-message-div").css("display", "flex");
$("#js-change-password-input").css("border-color", "rgb(95,160,95)");
noErrorChangePassword = true;
}
if (changePasswordValueLength < 8) {
$("#js-change-password-confirm-message").css("display", "none");
$("#js-change-password-confirm-message").empty();
$("#js-change-password-confirm-input").css("border-color", "rgb(225,225,225)");
} else {
if (changePasswordConfirmValue != changePasswordValue) {
var errorMessage = "<div class='error-message error-pointer'><p>Password doesn't match.</p></div>";
$("#js-change-password-confirm-message").html(errorMessage);
$(".validation-message-div").css("display", "flex");
$("#js-change-password-confirm-input").css("border-color", "rgb(190,115,110)");
} else {
var errorMessage = "<div class='success-message'><p>Password match.</p></div>";
$("#js-change-password-confirm-message").html(errorMessage);
$(".validation-message-div").css("display", "flex");
$("#js-change-password-confirm-input").css("border-color", "rgb(95,160,95)");
noErrorChangePasswordConfirm = true;
}
}
if (noErrorChangePassword == true && noErrorChangePasswordConfirm == true) {
$("#js-change-password-form").find("input, select, button").prop("disabled", true);
setTimeout(function(){
$("#js-change-password-form").fadeOut(750);
setTimeout(function(){
$(".change-user-password-message-success").fadeIn(750);
setTimeout(function(){
window.location.replace('./profile.php');
}, 5000);
}, 750);
}, 500);
$.ajax({
url : "./includes/change_password.script.php",
method : "POST",
data : {
changePasswordValue : changePasswordValue,
changePasswordConfirmValue : changePasswordConfirmValue,
/* userId : userId, ? */
submit : 1
},
success : function(data) {
$(".change-user-password-message-success").html(data);
}
});
}
});
/* ---------------------------------------------------------
-------------------- PASSWORD DISPLAY ------------------
----------------------------------------------------- */
/* -------- Password Display Hidden -------- */
$("#js-change-password-display").click(function(){
var fieldType = $("#js-change-password-input").attr("type");
if (fieldType == "password") {
$("#js-change-password-input").attr("type", "text");
$("#js-change-password-display").removeClass("hide-password").addClass("show-password");
} else {
$("#js-change-password-input").attr("type", "password");
$("#js-change-password-display").removeClass("show-password").addClass("hide-password");
}
});
/* -------- Confirm Password Display Hidden -------- */
$("#js-change-password-confirm-display").click(function(){
var fieldType = $("#js-change-password-confirm-input").attr("type");
if (fieldType == "password") {
$("#js-change-password-confirm-input").attr("type", "text");
$("#js-change-password-confirm-display").removeClass("hide-password").addClass("show-password");
} else {
$("#js-change-password-confirm-input").attr("type", "password");
$("#js-change-password-confirm-display").removeClass("show-password").addClass("hide-password");
}
});
});
<?php
if (isset($_POST["submit"])) {
include_once "dbconn.script.php";
$user_id = /* ? */;
$changePasswordValue = $_POST["changePasswordValue"];
$changePasswordConfirmValue = $_POST["changePasswordConfirmValue"];
$changePasswordValueLength = strlen($changePasswordValue);
if ($changePasswordValueLength < 8) {
echo "<p>Password should have at least 8 characters.<p>";
} else {
if ($changePasswordConfirmValue != $changePasswordValue) {
echo "<p>Passwords you entered does not match.</p>";
} else {
$hashedChangePassword = password_hash(base64_encode(hash('sha384', $changePasswordValue, true)), PASSWORD_BCRYPT, ["cost" => 11]);
$sql = "UPDATE hgs_users SET user_pw = ? WHERE user_id = ?";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
echo "<p>SQL statement failed!</p>";
exit();
} else {
mysqli_stmt_bind_param($stmt, "ss", $hashedChangePassword, $user_id);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
echo "<p>Success!</p>";
}
}
}
mysqli_close($conn);
} else {
header("Location: ../index.php");
}
?>