Установить куки при загрузке файлов в PHP - PullRequest
1 голос
/ 04 октября 2009

У меня есть обработчик загрузки php в upload.php, и там я должен следовать

<? setcookie("test",100,time()+3600); ?>

но при проверке установленных файлов cookie я не вижу никаких "тестовых" файлов cookie.

Не могли бы вы помочь мне установить cookie при загрузке файлов? почему этот скрипт загрузки отличается от любого обычного скрипта, к которому обращается браузер?

Вот код, который у меня есть

<?php           
 if (!empty($_FILES)) {            
    if(move_uploaded_file($tempFile,$targetFile))
        {               
                setcookie("targetPath",$targetPath,time() + 3600,'/');
                print $_COOKIE['targetPath']; // prints fine here
                echo 1;
        }
        else
                echo -1;} 
else
{
//print_r($_COOKIE);
print "start cookie >> ";
print $_COOKIE['targetPath']; // does not print when I call upload.php standalone
print " << end cookie";

}
?>

Ответы [ 4 ]

2 голосов
/ 04 октября 2009

Это может решить, а может и не решить вашу проблему, но я подумал, что должен указать на это:

  1. setcookie необходимо вызывать перед любым выводом, если только вы не используете буферизацию вывода.
  2. Первый аргумент для move_uploaded_file должен выглядеть примерно так: $_FILES["pictures"]["tmp_name"][0]
  3. Файлы cookie, установленные с помощью setcookie, не отображаются до загрузки следующей страницы. И да, это задокументировано в руководстве по PHP:

    Как только куки установлены, они можно получить на следующей странице load с $ _COOKIE или $ HTTP_COOKIE_VARS массивы.

    Это означает, что этот код:

    setcookie ("targetPath", $ targetPath, time () + 3600, '/'); print $ _COOKIE ['targetPath']; // печатает нормально здесь

    должен напечатать значение старого файла cookie.

  4. setcookie возвращает false, если это не удалось. Возможно, вы захотите проверить это возвращаемое значение.

0 голосов
/ 04 октября 2009

Вы проверяете, установлены ли файлы cookie в upload.php, т.е. тот же сценарий, который вы установили? Если так, я бы не ожидал, что они будут установлены. Файл cookie будет отправлен клиентом при следующем запросе HTTP после получения файла cookie с файла upload.php.

0 голосов
/ 04 октября 2009

setcookie имеет аргумент "путь" . Если он не указан: «Значением по умолчанию является текущий каталог, в котором устанавливается cookie». Поэтому, скорее всего, вы пытаетесь установить cookie для чего-то вроде www.youdomain.com/actions/upload.php, и в этом случае cookie будет установлен для / actions / path.

Также убедитесь, что вызов setcookie выполнен до любого вывода из вашего скрипта

0 голосов
/ 04 октября 2009

Попробуйте указать домен?

<?php    
setcookie( 'test', 100, time()+3600, '/', '.sitename.com' );

Вы берете его с $_COOKIE['test']?

PS - Вы не должны использовать короткие теги. Заменить <? на <?php.

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