php - 为什么 header('location: ') 不能在使用 ajax 的 php 中工作,但 session 正在工作?
问题描述
我正在使用 ajax 在登录部分发布并创建会话。会话正在工作,但其中的标题('location:chat.php')不起作用(未重定向)。当我尝试登录时,会话已创建但未重定向到 chat.php。我检查了 jQuery 和 ajax 是否正常工作并成功创建会话并登录但未重定向到 chat.php。可以帮助我吗?
jQuery('.userlogin').submit(function(){
var email = jQuery("input[name='email_address']").val();
var password = jQuery("input[name='password']").val();
$.ajax({
'url' : 'login.php',
'type' : 'POST',
'data' : {
'loginajax' : '',
'email' : email,
'password' : password
},
'success' : function(output){
jQuery('.ama-input').val('');
}
});
});
<?php
session_start();
require_once('functions.php');
if(isset($_POST['loginajax'])){
$email=$_POST['email'];
$password=$_POST['password'];
$query = mysqli_query($connection, "SELECT * FROM users WHERE email='$email'");
$info = mysqli_fetch_assoc($query);
$pass= $info['password'];
if($pass==md5($password)){
$_SESSION['login'] = "successful";
header('location: chat.php');
}
die();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Log In</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="box">
<h2 class="heading">Log In</h2>
<form action="" method="POST" class="userlogin">
<input class="ama-input" type="email" name="email_address" placeholder="Email Address" />
<input class="ama-input" type="password" name="password" placeholder="Password" />
<input type="submit" name="login" value="Log In" />
</form>
<a class="registration" href="register.php">Create an account</a><br />
</div>
<script src="js/jquery-3.5.1.min.js"></script>
<script src="js/script.js"></script>
</body>
</html>
解决方案
PHP 重定向将不起作用,因为您正在进行 ajax 调用。
尝试返回结果并像这样从您的脚本重定向。
$(function () {
jQuery('.userlogin').submit(function(e){
e.preventDefault();
var email = jQuery("input[name='email_address']").val();
var password = jQuery("input[name='password']").val();
$.ajax({
'url': 'login.php',
'type': 'POST',
'data': {
'loginajax': '',
'email': email,
'password': password
},
'success': function (output) {
console.log(output);
if (output.status == 'success') {
window.location.href = "your url here";//<- your url here
}
}
});
});
});
您的 PHP 代码应如下所示:
<?php
session_start();
require_once 'functions.php';
if (filter_input(INPUT_POST, 'loginajax')) {
$result['status'] = 'unsuccessful';
$result['message'] = 'login unsuccessful.';
$email = filter_input(INPUT_POST, 'email_address');
$password = filter_input(INPUT_POST, 'password');
$sql = "SELECT id,email,password FROM users WHERE email=?";
$stmt = mysqli_prepare($connection, $sql);
mysqli_stmt_bind_param($stmt, "s", $email);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password);
if (mysqli_stmt_fetch($stmt)) {
if (password_verify($password, $hashed_password)) {
$_SESSION['login'] = "successful";
$result['status'] = "success";
$result['message'] = "login successful.";
}
}
mysqli_stmt_close($stmt);
header('Content-Type: application/json'); // <-- header declaration
echo json_encode($result, true);
}
推荐阅读
- r - 当我用矩阵输入调用 hist(x) 时会发生什么?
- node.js - 为下一个/图像配置主机名
- python - uWSGI 线程存在导致 Django 的 SynchronousOnlyOperation 异常的正在运行的事件循环
- flutter - Stack中的两个StatefulWidget,移除widget A,状态B的disposed,widget B使用A的状态?
- java - 为什么 Kafka 在 Old gen 堆中有很多 Sensor 对象?
- angular - AlertController 在 Ionic 4 中不起作用。没有显示警报,没有任何错误
- python - 获取 pdf2image 的空列表(convert_from_bytes)
- css - 使用 CSS 制作圆形按钮的挑战
- matrix - 在prolog中替换矩阵中的元素
- nxopen - 如何使用 NX Open 获取 NX 中所有开放部件的列表?