如何评估将用户重定向到管理面板的PHP会话?
我想为我的如何评估将用户重定向到管理面板的PHP会话?,php,mysql,syntax,Php,Mysql,Syntax,我想为我的check.php文件中的panel.php文件设置会话。我定义$\u SESSION['admin']=1,然后在panel.php文件中评估管理会话,但我不知道为什么我的面板页面重定向到index.php(登录表单) 我带来了以下所有代码: check.php: panel.php: 管理面板 欢迎来到管理小组 如何解决此重定向问题?尝试检查$result中是否存储了某些内容。您对重定向函数的调用是在设置$\u SESSION['admin']之前进行的。在编写新代码时,您
check.php
文件中的panel.php
文件设置会话。我定义$\u SESSION['admin']=1
,然后在panel.php
文件中评估管理会话,但我不知道为什么我的面板页面重定向到index.php
(登录表单)
我带来了以下所有代码:
check.php:
panel.php:
管理面板
欢迎来到管理小组
如何解决此重定向问题?尝试检查$result中是否存储了某些内容。您对重定向函数的调用是在设置$\u SESSION['admin']之前进行的。在编写新代码时,您应该避免使用mysql函数,下面是您的代码修复并移植到PDO,这可能是您感兴趣的
<?php
session_start();
include_once ("function.php");
if($_SERVER['REQUEST_METHOD']=='POST'){
if (isset($_POST['tfpass']) && isset($_POST['tfuser'])){
// PDO CONNECT
try {
$db = new PDO("mysql:host=localhost;dbname=login", 'root', 'pass');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}catch (Exception $e){
die('mySQL server error: '.$e->getMessage());
}
$sql = "SELECT 1
FROM administration
WHERE username=:user AND password=:pass";
//Prepare the above query
$stmt = $db->prepare($sql);
//bind the placeholders to the values
$stmt->bindParam(':user', $_POST['tfuser']);
$stmt->bindParam(':pass', $_POST['tfpass']);
//Execute
$stmt->execute();
//Fetch Result
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (!empty($result)){
//login to panel
$_SESSION['admin']= 1 ;
redirect("panel.php");
} else {
//back to login page
redirect("index.php?error");
}
} else {
//back to login page
redirect("index.php");
}
}else{
//back to login page, script not accessed via POST
redirect("index.php");
}
?>
您的问题是什么?(如果你能更恰当地格式化你的代码,那会很有帮助)@hakre我可以问一下。。。在panel.php中包含任何类似op的文件后启动会话好吗?因为我认为这样会生成会话警告/error@NullPointer:是的,这可能是个问题。然而,我还不清楚实际的问题是什么。例如,是否有任何警告或错误消息?可能会放入ini\u集('display\u errors',1);错误报告(~0)脚本顶部的代码>将显示有关此类和其他相关问题的更多信息。是的,我确信这件事,因为我的会话验证中出现了一些错误,因为当我删除时!根据我在这里的验证:如果(!isset($_SESSION['admin'])==1),我的脚本工作正常,还有一件事我注意到您没有在check.php文件中调用SESSION_start()。@Delphinium这是一个非常简洁的答案。也许作为对原始问题的评论会更好?@DuncanJones我同意,但我对stackoverflow有点陌生,不知道如何真正做到这一点!所以这里有一个小小的道歉。@Delphinium对不起,我怀疑你无法做到这一点,因为你目前的声誉很低。为呻吟道歉!:-)在设置变量之前从该页面重定向,这就是为什么$\u会话['admin']仍然为空。我猜您的重定向函数看起来是这样的:函数重定向($url){header($Location:$url”);exit;}调用此函数后,进一步执行将中断,客户端将重定向到url。只需反转这两行,我就可以看到下面的解决方案(ommiting PDO)
<?php
include_once ("function.php");
session_start();
if (!isset($_SESSION['admin'])==1){
session_destroy();
redirect("index.php");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>admin panel</title>
</head>
<body>
welcome to admin panel
</body>
</html>
<?php
session_start();
include_once ("function.php");
if($_SERVER['REQUEST_METHOD']=='POST'){
if (isset($_POST['tfpass']) && isset($_POST['tfuser'])){
// PDO CONNECT
try {
$db = new PDO("mysql:host=localhost;dbname=login", 'root', 'pass');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}catch (Exception $e){
die('mySQL server error: '.$e->getMessage());
}
$sql = "SELECT 1
FROM administration
WHERE username=:user AND password=:pass";
//Prepare the above query
$stmt = $db->prepare($sql);
//bind the placeholders to the values
$stmt->bindParam(':user', $_POST['tfuser']);
$stmt->bindParam(':pass', $_POST['tfpass']);
//Execute
$stmt->execute();
//Fetch Result
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (!empty($result)){
//login to panel
$_SESSION['admin']= 1 ;
redirect("panel.php");
} else {
//back to login page
redirect("index.php?error");
}
} else {
//back to login page
redirect("index.php");
}
}else{
//back to login page, script not accessed via POST
redirect("index.php");
}
?>