php - 使用 PHP 和 AJAX 登录:不工作。接收失败的警报不正确的凭据 - 但是没有收到任何错误
问题描述
我正在尝试建立一个成功的登录,创建一个登录会话'$_SESSION['user_id']'
并在成功登录后:我想使用他们唯一的 user_id 参数将用户重定向到他们的 dashboard.php 页面。
IE 'dashboard.php?id=1'
- 虽然我不完全确定如何在 URL 中传递唯一的用户 ID 参数(通过 ajax 方法),所以也可以使用一些帮助。
否则,如果登录不成功,我希望用户收到一条提示凭据无效的警报。
问题:我不断收到无效凭据警报,但没有看到任何错误。
我知道这不是最安全的方法,但是出于测试目的,我将密码作为 MD5 加密存储在我的表中。
这是我的 HTML 表单:
<form action="assets/secure_login.php" method="post" id="loginform">
<input type="text" placeholder="Username" id="username" name="username" class="login_input" required>
<input type="password" placeholder="Password" id="password" name="password" class="login_input" required>
<button type="submit" class="login_button" id="login_button">Login</button>
</form>
我的 AJAX:
<script>
$(document).ready(function() {
$('#loginform').submit(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: 'assets/secure_login.php',
data: $(this).serialize(),
success: function(data)
{
if (data === 'Login') {
window.location = 'dashboard.php?id='+(not sure what to put here to generate unique user ID);
}
else {
alert('Invalid Credentials');
}
}
});
});
});
</script>
这是我的包含数据库连接的 connect.php 文件:
<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'myDatabase';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
if(! $conn ) {
die('Could not connect: ' . mysqli_error());
} ?>
PHP代码:
<?php
include "connect.php";
class Users {
public $username = null;
public $password = null;
public function __construct( $data = array() ) {
if( isset( $data['username'] ) ) $this->username = stripslashes( strip_tags( $data['username'] ) );
if( isset( $data['password'] ) ) $this->password = stripslashes( strip_tags( $data['password'] ) );
}
public function storeFormValues( $params ) {
$this->__construct( $params );
}
public function Login() {
$success = false;
try{
$con = new PDO(include 'connect.php');
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1";
$user = username;
$stmt = $con->prepare( $sql );
$stmt->bindValue( "username", $this->username, PDO::PARAM_STR );
$stmt->bindValue( "password", md5($this->password), PDO::PARAM_STR );
$stmt->execute();
$valid = $stmt->fetchColumn();
if( $valid ) {
$success = true;
session_start();
session_regenerate_id();
$_SESSION['user'] = $user['user'];
session_write_close();
echo ('Login');
exit();
}
$con = null;
return $success;
}catch (PDOException $e) {
echo $e->getMessage();
return $success;
}
} }
请有人可以告诉我哪里出错或帮助我调整代码以使其正常工作吗?提前致谢。
解决方案
如果在 PHP 代码中登录成功,可以返回 JSON 格式的数据。您将在您的 javascript 代码中使用您的用户 ID 进行重定向。
例子 :
https://www.w3schools.com/js/js_json_php.asp
推荐阅读
- java - java 流:根据抛出的异常进行过滤的优雅方式
- gradle - Intellij 插件中的 java.lang.NoClassDefFoundError
- c# - 在 C# 中调用 Prolog 文件
- angular - Angular 中的 QR 扫描
- gis - 在 onclick 客户端事件上从服务器运行 GDAL/OGR 函数
- excel - 评论按分页符拆分
- javascript - 一页轮播中的两个视频 - Chromium
- c - 分叉后从子管道读取卡在未知位置的读取循环中
- postgresql - 不能在终端中使用 dropdb 命令删除 db posgres?
- ruby-on-rails - rspec match_array 递归?