【发布时间】:2015-09-30 18:41:14
【问题描述】:
我遇到了 2 个文件的问题:login_config.php 和 profile.php。
- login_config.php 包含一个登录系统,它在完成多种形式的身份验证后将 $_SESSION['key'] 设置为 true。
- profile.php 是用户成功后重定向到的页面。
我希望 profile.php 上的数据只能通过设置 $_SESSION['key'] 访问(成功登录后)。
我的问题:我的代码有什么问题?此外,为什么我在登录提交时出现错误,该错误仅在 $_SESSION['key'] 为 false/未设置时才返回,而不是目标 profile.php 页面?
代码:(login_config.php)
<?php
// POST VARIABLES
$submit = $_POST['login_submit'];
$username = $_POST['login_username'];
$password = $_POST['login_password'];
$email = $_POST['login_email'];
require 'password_config.php';
if(isset($submit)){
require 'db/connect.php';
// PASSWORD VERIFYING
$pass_query = "SELECT password FROM users WHERE email='$email'";
$queried = mysql_query($pass_query);
while($row = mysql_fetch_array($queried)){
$user_pass = $row['password'];
$veri_password = password_verify($password, $user_pass);
}
if(!$veri_password === true){$errors[] = '-Account does not exist ';}
// CHECKING NUM ROWS
$sql = "SELECT id, username FROM users WHERE password='$user_pass' AND email='$email'";
$entered_user = mysql_query($sql);
$num_rows = mysql_num_rows($entered_user);
// ERRS ARRAY ESTABLISHED
$errors = array();
// FURTHER VERIFYING
if( empty($password) || empty($email) )
{
$errors[] = 'Please do not leave fields empty';
}
elseif( $num_rows != 1 )
{
$errors[] = '-Account does not exist ';
}
elseif( $num_rows == 1 )
{
session_start();
$_SESSION['key'] === true;
while($row = mysql_fetch_array($entered_user)){
$_SESSION['id'] = $row['id'];
$_SESSION['email'] = $email;
$_SESSION['user'] = $row['username'];
$_SESSION['pass'] = $password;
header('Location: profile.php');
exit();
}
}
}
代码:(profile.php)
<?php
session_start();
if($_SESSION['key'] !== true){
die ("please <a href='login.php'>log in</a> to view this page");
}
?>
<html>
<head>
<title>Profile</title>
<link href='css/main.css' rel='stylesheet' />
</head>
<body>
<div id='container'>
<?php require 'include/header.php'; ?>
<?= 'NJM ID # ==>'.$_SESSION['id'].'<br />'.'Username ==>'.$_SESSION['user'].'<br/>'.'Password ==>'.$_SESSION['pass'].'<br/>'.'<br />' ?>
<a href='logout.php'>Log out!</a>
<br />
-OR-
<br />
<p>Try our beta mode<a href='forum.php'> forum</a></p>
<?php require 'include/footer.php'; ?>
</div>
</body>
</html>
注意:我知道在当前代码状态下我很容易受到 SQL 攻击,我稍后会修复这个问题,而且我还坚持使用已弃用的 MySQL 版本。
【问题讨论】:
-
另外,提前感谢您的帮助 -Eugene
-
不完全确定为什么这个问题被否决了。仍未收到解决方案。
-
您可以缩进您的代码并更具体地了解您遇到的错误。注释您的代码以显示逻辑失败的位置以及您期望看到的/实际看到的内容
-
session_start();应该总是首先开始,在渲染后你不能这样做,它是代码,它是 html。它是需要打开的第一件事。所以你应该在设置变量之前使用它。一个 sessin 总是处于活动状态,不管你是否使用它,是或否。另外,我建议在设置会话后对会话进行 var 转储并检查变量是否已保存。因为您的会话是否保存任何内容?是否仅在您的其余页面中出现?