会话变量的问题

时间:2012-08-21 23:55:00

标签: php mysql session

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

23和46出错的行是:

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

这段代码

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

看起来你的会话启动有问题。我会假设session_set_cookie_params(0, '/~cgreenheld/'); 第二个参数有问题。您的网页必须包含类似www.example.com/~cgreenheld/的网址,其设置与您的相同。或者您可能没有包含会话开始所在的index.php。

答案 2 :(得分:0)

你的错误来自于$ _SESSION ['authorization']未设置因此不存在的事实。由于它不存在而您在第23和46行中调用它,因此您将收到这些错误。作为一个注释,可能更好的做法是在调用它们之前测试这些变量是否已设置,如果它们为空或未设置,则不会出现这些错误。

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

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

答案 3 :(得分:0)

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