0
<?php
session_name('MYSESSION');
session_set_cookie_params(0, '/~cgreenheld/');
session_start();
?>              

<?php
    if($_SESSION['authorisation'] == 'knownuser') {
       echo '<ul class="log">';
       echo '<li><h4>You are logged in "'.$_SESSION['user'].'"</h4></li>';
       echo '<li><a href="logout.php">Logout</a></li>';
       echo "</ul>";
     } else {
        echo "<h4>You are not logged in</h4>";
     }

     if($_SESSION['authorisation'] == 'knownuser') {
        echo "<ul>";
        echo "<li><h4>You are logged in and already have an account</h4></li>";
        echo '<li><a href="index.php">Return Home</a></li>';
        echo "</ul>";
       } else {

        echo "<form method='post' action='".$_SERVER['PHP_SELF']."'>";
        echo '<fieldset class="login">';
        echo "<h2>Login</h2>";
        echo "<ul>";
        echo '<li><label for="Username"> Username: </label> <input type="text" name="Username" id="Username"></li>';
        echo '<li><label for="Password"> Password: </label> <input type="password" name="Password" id="Password"></li>';
        echo '<li><input type="submit" value="Login"><li>';
        echo "</ul>";
        echo "</fieldset>";
        echo "</form>";
       }
       if ((isset($_POST['Password'])) && $_POST['Password'] != "") {                   
         $conn= new mysqli("localhost", "my_user", "my_password", "world"); //changed for the sake of this question

         $match_Username = '%';
         $match_Password ='';

         if(isset($_POST['Password'])) {
            $clean_Password = mysqli_real_escape_string($conn, $_POST['Password']);
            $match_Password =  sha1($clean_Password);
         }

        if (isset($_POST['Username'])) {
            $clean_Username = mysqli_real_escape_string($conn, $_POST['Username']);
            $match_Username = $clean_Username;
        }

        echo $query = "select * from User WHERE Username = '$match_Username' and Password = '$match_Password';";
        $result = $conn->query($query);

        if ($result->num_rows==1) {
            $_SESSION['authorisation'] = 'knownuser';
            $_SESSION['user'] = $_POST['Username'];
            header("Location: index.php");
            exit;
        } else {
            $_SESSION['authorisation'] = 'unknownuser';
            header("Location: error.php");
            exit;
            }               
        }

这两个 php 选项卡将在此版本中显示它们来自不同的文件。我已经让一个用户登录,当用户登录时,我希望它重定向到首页,并且我希望它显示“您已登录在此处插入用户名。Atm 我只得到一个空字符串,并且我不知道为什么。帮助任何人吗?我也知道我没有清理我的输入等等。而且我不断收到关于授权会话变量的错误 [22-Aug-2012 11:32:02] PHP 注意:未定义索引:/devel/cgreenheld/projects/Asgn1/login.php 第 23 行 [22-Aug-2012 11:32:02] PHP 注意:未定义索引:/devel/cgreenheld/projects/Asgn1/login 中的授权第 46 行的 .php 我不太确定那是什么,但如果有人可以为我澄清一下,那就太好了。

23 和 46 出错的行是:

if($_SESSION['authorisation'] == 'knownuser') {

这段代码在这里

4

4 回答 4

1

好的,我发现了要问的问题。我没有会话用户的 isset,所以它没有检查它。当我开始检查它时,它显示了用户名。感谢大家的帮助,以及对我遇到的授权错误的帮助。

于 2012-08-22T00:26:02.930 回答
0

看起来您在会话开始方面有问题。我会假设session_set_cookie_params(0, '/~cgreenheld/'); 第二个参数有问题。你的页面必须有一个像 www.example.com/~cgreenheld/ 这样的 URL,并且设置和你的一样。或者您可能不包含会话开始所在的 index.php。

于 2012-08-22T00:10:38.027 回答
0

那么您的错误来自 $_SESSION['authorisation'] 未设置因此不存在的事实。由于它不存在并且您在第 23 行和第 46 行调用它,因此您会收到这些错误。请注意,最好在调用这些变量之前测试这些变量是否已设置,这样如果它们为空或未设置,您将不会收到这些错误。

if(!empty($_SESSION['authorisation']))

所以问题是没有在 login.php 中设置会话变量。我相信您的部分问题可能来自您的 sql 查询后条件中的 header() 调用。需要在编写任何 html 之前发送标头,因此当您在顶部编写表单然后发送标头时,标头将不起作用。尝试将表单的操作更改为单独的页面(例如“authenticate.php”)并将您的 sql 查询和会话设置移动到那里。不要忘记 session_start() 在顶部,并确保你的 header()s 之前没有 html。

于 2012-08-22T00:17:09.773 回答
0

正如穆萨指出的那样,你是使命session_start()职能。您的通知表明authorisationkey 中不存在$_SESSION,这也表明会话未初始化。

于 2012-08-22T00:03:17.463 回答