【发布时间】:2017-07-26 01:35:22
【问题描述】:
我有一些代码总是在 else/if 语句中返回 $aid=1。谁能帮我弄清楚为什么这可能在逻辑中发生?
<?php
session_start();
require('includes/config.php');
if(!$user->is_logged_in()){ header('Location: login.php'); }
include_once("config.php");
if(isset($_SESSION['account_id'])) {
$aid = $_SESSION['account_id'];
} else if(isset($_POST['aid'])) {
$aid = $_POST['aid'];
} else if(isset($_GET['aid'])) {
$aid = $_GET['aid'];
} else {$aid='1';}
include_once('includes/top.php');?>
快速背景(如果有帮助的话)...这是用于登录。客户登录后,我会尝试仅在数据库中显示他们的数据。我已经提取了所有正确的数据,但我无法让登录用户调用正确的 account_id。如果我将最后一个 $aid=1 更改为 $aid=2,那么它将正确提取所有 account_id=2 信息,但它会为每个登录的人执行此操作。
非常感谢任何建议。
谢谢!
下面是登录功能
<?php
require_once('includes/config.php');
if( $user->is_logged_in() ){ header('Location: main.php'); }
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = $_POST['password'];
if($user->login($username,$password)){
$_SESSION['username'] = $username;
header('Location: main.php');
exit;
} else {
$error[] = 'Invalid username/password or your account has not been activated.';
}
}
$title = 'Login';
require('layout/header.php');
?>
在表单中调用的php下面有一些html。如果这也有帮助,我可以加载它。谢谢!
另外,account_id 是在管理部分中管理的。数据库的 clients 表中有一个关联的 account_id,用于指定每个用户拥有的帐户。
【问题讨论】:
-
$_SESSION['account_id']和$_POST['aid']和$_GET['aid']是什么?他们似乎都没有设置 -
从
$_POST或$_GET变量中获取帐户ID 不是一个好主意,因为任何人都可以更改它们并访问其他用户的数据。 -
谢谢希马尔。我是游戏的菜鸟。有什么建议可以减轻这种风险?
-
使用已经包含安全登录/用户管理的 PHP 框架。 Symfony、Laravel、CodeIgniter 都是选项。有一个额外的学习曲线(学习框架),但完全值得。
-
您可以在登录过程中从数据库中获取帐户 ID 并将其分配给会话变量。也请编辑问题以包含任何更新,而不是将它们作为 cmets 发布。
标签: php mysql session if-statement login