在我尝试上班的程序中,我无法弄清楚为什么我必须两次登录才能设置会话。我导航到不同页面的方式如下
<?php
if (!isset($_REQUEST['content']))
{
if (isset($_SESSION['gallery_admin']))
include("edit.inc.php");
else
include("adminlogin.php");
}
else
{
$content = $_REQUEST['content'];
$nextpage = $content . ".inc.php";
include($nextpage);
} ?>
我有一个页面供用户登录,如下所示,它将session_var返回到名为adminlogin.php的页面。 User类做了它应该做的事情,但由于某种原因我必须登录两次。我使用相同的代码,但没有类,它工作正常。 PHP新手并尝试学习OOP并可以使用帮助。 感谢
public function CheckUser ($username, $hashedpassword)
{
$query = "select count(*) from user where username = ? and password = ?";
$dbConnection = $this->connection;
$stmt = mysqli_prepare($dbConnection,$query);
mysqli_stmt_bind_param($stmt, 'ss', $username, $hashedpassword);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt,$userCount);
mysqli_fetch($stmt);
if ($userCount > 0)
{
//$_SESSION['gallery_admin'] = $username;
//$user = $this->username;
//$this->session_var = $_SESSION['gallery_admin'];
$this->session_var = $username;
return $this->session_var;
//include ("adminmain.inc.php");
//header("Location: admin.php");
}
else {
return "in the else";
}
}
adminlogin.php
<?php
if (isset($_POST['submit'])) {
$username = trim($_POST['username']);
$password = trim($_POST['password']);
$hashedpassword = md5($password);
$instanceOfUserClass = new User();
$found_user = $instanceOfUserClass->checkUser($username, $hashedpassword);
//$instanceOfUserClass->checkUser($username, $hashedpassword);
//echo $instanceOfUserClass->session_var;
if ($found_user ) {
//$user = $instanceOfUserClass->session_var;
$_SESSION['gallery_admin'] = $found_user;
include ("edit.inc.php");
//header("Location: admin.php");
} else {
//echo "No User";
}
}
?>
答案 0 :(得分:1)
使用OOP不会改变会话的工作方式。
以你想要的任何方式采取这种方式:你的示例代码非常混乱。如果我抓住我的一位同事写这样的代码,我会给他们一个星期来改善自己或让他们被解雇。您很可能只是在某处发生了错误,但可能不在您提供的代码示例中。如果有的话,我会建议你采用更强大的编程风格。
无论如何,我也遇到了类似的问题,这可能会对你有所帮助:
确保您始终只调用session_start()
一次(即它应该在整个应用程序中的一个位置)。
确保在检查之前设置SESSION
值。
摘要与会话有关。不要自己检查SESSION
变量,编写一个为您完成的变量。例如:$user->setGalleryAdmin(true)
和$user->isGalleryAdmin()