управление сессиями: проблема с отображением имени пользователя в заголовке - PullRequest
0 голосов
/ 03 мая 2010

Я работаю над простым модулем входа и выхода для моего сайта без какой-либо защиты. Я использую Wamp на компьютере с Windows XP. Я создаю сеанс, когда пользователь отправляет информацию для входа в систему, которую он перенаправляет в файл process.php, который создает переменные сеанса и запускает сеанс. Теперь, если вход выполнен успешно, пользователь перенаправляется на страницу приветствия, которая содержит файл заголовка (который отображает заголовок, содержащий параметры справки о выходе из системы). Проблема заключается в том, что заголовок не изменяет ссылку входа в систему при выходе из системы, когда пользователь успешно входит в систему. Приведенный ниже код взят из process.php, который инициирует вход в систему.

$username = $_POST['username'];
        $password = $_POST['password'];

        //echo "{$username}:{$password}";
        $connection = mysql_connect("localhost","root","");
        if(!$connection)
        {
            die("Database Connection Failed".mysql_error());
        }
        $db_select = mysql_select_db("tester",$connection);
        if(!$db_select)
        {
            die("Database Selection Failed".mysql_error());
        }
        $result = mysql_query("SELECT * FROM user",$connection);
        if(!$result)
        {
            die("Database Selection Failed".mysql_error());
        }


        $q = "SELECT * FROM user " ."WHERE Name='".$username."' AND Password='".$password. "' ";
         // Run query
         $r = mysql_query($q);

         if ( $obj = @mysql_fetch_object($r) )
        {
            session_start();
            // Login good, create session variables
            $_SESSION["valid_id"] = session_id();
            $_SESSION["valid_user"] = $_POST["username"];
            $_SESSION["valid_time"] = time();

            Header('Location: welcome.php');

Следующий код взят из header.php, который включен в welcome.php

    </div>

    <div id = "userdetail">

        <?php

        if(isset($_SESSION["valid_user"]))
        {
            echo($_SESSION["valid_user"]." " ); 
             echo("<a href=logout.php>Logout</a>"); 

        }
        else
        {
            echo("<a href = login.php>Sign In</a>");
        }

        ?>

              | Help |  Search      

            <input type = "text" name = "searchbox" value = "" />
    </div>
</div>

1 Ответ

0 голосов
/ 03 мая 2010

Вы должны вызывать start_session () каждый раз на каждой вызываемой странице. Это всегда должен быть первый звонок, который вы делаете на своих страницах.

при выходе из системы session_destroy.

дополнительно вы должны очистить переменную $ _SESSION

$_SESSION = array();

Совет по кодированию: Сплит вы отображаете вещи из кода PHP с помощью движка шаблонов, таких как smarty Ваш код содержит ошибку внедрения SQL , см. Мой комментарий к вашему сообщению.

Вы также должны использовать хешированные пароли и не забывать соль. не храните простые пароли в вашей базе данных.

SQL-инъекция

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...