Регистрация переменной сеанса PHP - PullRequest
2 голосов
/ 06 августа 2011

Я пытаюсь создать простую форму входа.У меня session_start();как первое, что загружается на странице.У меня есть файл login.php, который содержит код, связанный с логином, который обрабатывается с помощью вызова ajax при нажатии кнопки входа в систему.Он содержит:

if ($_GET['cemail']) {

$email = $_GET['cemail']; 
$password = md5($_GET['cpassword']); 
$sql = "select * from users where email='" . $email . "' and password='" . $password . "'";
$result = mysql_query($sql);
if (mysql_num_rows($result) >= 1) { 
    session_register("email");
}
else {
    echo "<span style='color:#ffffff;'>Invalid Email/Password</span><br>";
}

}

Когда я нажимаю кнопку входа в систему, я получаю это предупреждение:

Предупреждение: session_register () [function.session-register]: не удается отправить кэш сеансаlimiter - заголовки уже отправлены (вывод начался с /home/clicker/public_html/hstrial-RBochner/login.php:1) в /home/clicker/public_html/hstrial-RBochner/login.php в строке 82

Строка 82 - это строка, которая говорит session_register("email");

Я также пытался создать кнопку выхода из системы, которая просто вызывает session_destroy(), но она дает мне следующее:

Предупреждение: session_destroy () [function.session-destroy]: Попытка уничтожить неинициализированный сеанс в /home/clicker/public_html/hstrial-RBochner/login.php в строке 66

Что я делаю неправильноВот?Я пытался разместить session_start() в разных местах.Любая помощь / идеи?Спасибо.

Ответы [ 5 ]

5 голосов
/ 06 августа 2011

вам нужно:

  1. поместите session_start () в начале вашего кода
  2. не использовать session_register (), является устаревшей функцией, замените на $ _SESSION ['foo'] = 'baa';
  3. уничтожить сессию:

    session_start ();
    session_destroy ();

  4. ваше веб-приложение уязвимо для SQL-инъекции атака. -check лучший способ остановить SQL-инъекцию в PHP

1 голос
/ 06 августа 2011

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

<?php
//logout.php
session_start();
session_destroy();
echo "Logouted"

вместо

  session_register()

, используйте только

   $_SESSION['email'] = ''; 
0 голосов
/ 07 августа 2011

Я заставил его работать, поместив весь php-код в самое начало страницы.

0 голосов
/ 06 августа 2011

Из того, что я могу прочитать в session_register() документации PHP ( ссылка ), кажется, что session_register() устарело и что $_SESSION["email"] = "email@example.com"; это новый способ сделать это с PHP 4.1.0.

Примером кода будет (я не уверен, что это работает, но оно должно направить вас в правильном направлении);

<?php
    if ($_GET['cemail']) {
        $email = $_GET['cemail']; 
        $password = md5($_GET['cpassword']); 
        $sql = "select * from users where email='" . $email . "' and password='" . $password . "'";
        $result = mysql_query($sql);
        if (mysql_num_rows($result) >= 1) { 
            $_SESSION['email'] = $email;
        }
        else {
            echo "<span style='color:#ffffff;'>Invalid Email/Password</span><br>";
        }
    }
?>

Для выхода из системы вы бызатем выполните:

<?php
    session_start(); 
    session_destroy();
?>

или

<?php
    session_start();  
    if(isset($_SESSION['email']))
        unset($_SESSION['email']); 
?>
0 голосов
/ 06 августа 2011

Переместить сессию_регистрации перед выполнением печати или эха.

...