0

我正在迈出第一步php,我遇到了这个对我来说无法解决的问题。我正在尝试创建一个网站,该网站使用简单的MySQL数据库来识别访问者提供的一些凭据。请注意,此时我对网站的整体安全性并不真正感兴趣。现在解决问题:

假设我有 3 个文件。在文件main_login.php中存储了用户进入网站必须使用的表单,即调用checklogin.php

<form name="form1" method="post" action="checklogin.php">

checklogin.php我正在检查用户提供的输入(名称和密码)是否包含在数据库中,如果正确,我将他重定向到index.php

// More unrelated php here....
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $username and $password, table row must be 1 row
if($count==1)
{   
   // Register $username, $password and redirect to file "index.php"
   $_SESSION['username'] = $username;
   $_SESSION['password'] = $password;
   header("location:index.php");
}
else 
{
   echo "Wrong username or password";
}

最后,index.php我正在检查是否定义了“$_SESSION[username]”,否则我将用户重定向到 main_login.php。

<?php
    session_start();
    if (!isset($_SESSION['username']))
    {
        header("location: main_login.php");
    }
?>

// HTML code here...

现在的问题:也许我在这方面投入了太多时间,我无法清楚地思考,但每当我输入正确的密码和用户名时,我总是被重定向到 main_login.php,这与我输入错误凭据时不同。有人可能解决这个问题吗?

4

3 回答 3

1

当您在检查登录页面上设置会话变量时,您似乎还没有启动会话。这意味着$_SESSION['username']一旦它们被重定向到索引页面就不会被设置。

于 2013-02-07T00:35:29.287 回答
0

session_start() 根据通过 GET 或 POST 请求或通过 cookie 传递的会话标识符创建会话或恢复当前会话。

如果您没有 session-cookie 并且因为您没有发布或到达那里 session_start 启动一个 FRESH 会话,从而清除用户名和密码,只需将 SID 添加到您的重定向以确保安全,否则您将被重定向到索引并直接再次登录。

header("location:index.php".SID); //should fix the missing sessioncookie
于 2013-02-07T00:43:20.850 回答
0

session_start()在任何输出之前的脚本顶部。

您的会话未初始化,因此您无法操纵会话变量。

于 2013-02-07T02:11:06.383 回答