1

Тема: coockie

Здравствуйте! Возникла проблема. Я отправляю куки. Проверяю, отправлены они или нет:

if(setcookie('auto', 'yes', time() + 259200))

функция возвращает ответ - true (т.е. отправлены). Но их нет! Я проверил просто в браузере - с сайта куки не приходили... Как такое может быть?И что надо делать?

Заранее спасибо.

2

Re: coockie

Проверьте, чтобы куки отправлялись до вывода html или функций print и echo.

Хотелось бы понять как вы проверяете наличие кукисов.

3 (изменено: Hase, 2012-08-14 21:07:49)

Re: coockie

<?php
session_start();
if(isset($_POST['login'])) {
    require_once "../engine.php";
    $error = "";
    $FATAL = FALSE;
    $login = $_POST['login'];
    $password = $_POST['password'];
    $autoenter = checkbox_verify('autoenter');
    sanitizeString($login);
    sanitizeString($password);
    if ($login == "" || $password == "") {
        $error = "Заполнены не все поля";
        $FATAL = TRUE;
    }
    else {
        require_once "login.php";
    }
    if ($FATAL == TRUE) {
    ?>
    <div class="error">
        <?php echo $error ?>
    </div>
    <?php
    }
    else {
        require_once "userstrukture.php";
    }
}
echo $COO;
?>
<script>
    showTextarea(<?php echo $loggedin ?>,'','');
</script>

Этот файл обрабатывает форму (форма ajax).
В него подключается файл login.php который конкретно обрабатывает данные и отсылает куки. Привожу его ниже.

<?php
$query = "SELECT * FROM hpmembers WHERE login='$login' AND password='$password'";
        $result = queryMysql($query);
        if(mysql_num_rows($result)) {
            $row = mysql_fetch_row($result);
            $id = stripslashes($row[0]); // ID
            $res = stripslashes($row[1]); // Login
            $_SESSION['user'] = $login;
            $_SESSION['userid'] = $id;
            require_once "getuserinfo.php";
            $loggedin = 1;
            if ($autoenter == 1) {
                setcookie('login', "$login", time() + 259200);
                setcookie('password', "$password", time() + 259200);
                if(setcookie('auto', 'yes', time() + 259200)) {
                    $COO = "ОТПРАВЛЕНО";
                }
                else $COO = "ОШИБКА";
            }
        }
        else {
            $error = "Неправильный логин/пароль";
            $FATAL = TRUE;
            $loggedin = 2;
        }
?>

getuserinfo.php

<?php
    $query_info = "SELECT * FROM hpuserinfo WHERE id='$id'";
    $result_info = queryMysql($query_info);
    $row_info = mysql_fetch_row($result_info);
    $name = stripslashes($row_info[1]); // name
    $surname = stripslashes($row_info[2]); // surname
    $query_message = "SELECT * FROM hpmessages WHERE whom='$id' AND readbl='FALSE'";
    $result_message = queryMysql($query_message);
    if(mysql_num_rows($result_message)) {
        $count_query = "SELECT count(1) FROM hpmessages WHERE whom='$id' AND readbl='FALSE'";
        $handle = queryMysql($count_query);
        $tmp  = mysql_fetch_array($handle);
        $messagecount = $tmp[0];
    }
    else {
        $messagecount = "0";
    }
?>

И файл с функциями (engine.php)

function queryMysql($query) {
    $result = mysql_query($query) or die(mysql_error());
    return $result;
}

function sanitizeString($var) {
    if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
        $str = stripslashes($var);
        $str = mysql_real_escape_string($var);
    } 
    else {
        $str = mysql_real_escape_string($var);
    }
    $var = strip_tags($var);
    return $var;
}

function checkbox_verify($_name) {
    $result=0;
    if (isset($_REQUEST[$_name])) {
        if ($_REQUEST[$_name]=='on') { 
            $result=1; 
        } 
        else { 
            $result=0; 
        }
    }
    return $result;
}

Как можно заметить, я в переменную $COO отправляю результат выполнения (я намеренно ввожу корректные данные в форму, чтобы переменная заполнилась)
В файле userstructure.php генерируется меню для пользователя, которое возвращает ajax. Его приводить, думаю, не нужно, так как там голый html.

После отправки формы, ajax возвращает сгенерированное меню и слово "ОТПРАВЛЕНО", что означает, что скрипт работает.

Hanut сказал:

или функций print и echo.

Извините, немного не понял этот момент)

4

Re: coockie

Вы получаете $COO = "ОТПРАВЛЕНО"; значит Ajax вернет куки. Вы можете посмотреть их в Firefox используя Firebug, например. Я думаю вы их получаете, но страница с которой идет Ajax запрос кукисов не получает, что совершенно естественно, их там и не может быть до перезагрузки страницы.

С print и echo у вас проблем нет.

5

Re: coockie

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

Спасибо!