2014-10-07 4 views
0

Это на странице под названием headersessioncookie.phpPHP значение куки не передается от одной страницы к другой

<?php 
    session_start(); 
    if (! isset ( $_SESSION['loggedin'])) { 
     $_SESSION['loggedin'] = FALSE; 
    } 

    $expiry = time()+60*60*9000; 
    setcookie('cookie[loggedin]', '', $expiry, "", "", "", TRUE); 

    if (! isset ( $_COOKIE['cookie[loggedin]'])) { 
    $_COOKIE['cookie[loggedin]'] = FALSE; 
    } 

?> 

Это на странице под названием test.php

<?php 
    require_once('headersessioncookie.php'); //start session and cookie 

    $_SESSION['loggedin'] = TRUE; 
    $_COOKIE['cookie[loggedin]'] = TRUE; 

?> 

Когда я запускаю тест .php, а затем запустить эту страницу ниже называется test1.php ...

<?php 
    require_once('headersessioncookie.php'); //start session and cookie 

    echo "sessionvalue" . $_SESSION['loggedin'] . '<br>'; 
    echo "cookievalue" . $_COOKIE['cookie[loggedin]'] . '<br>'; 

?> 

... Я получаю

sessionvalue1 
cookievalue 

Почему я не получаю ...

sessionvalue1 
cookievalue1 

... ??

+0

Параметр 6 является логическим, и вы используете его в качестве строки, так что измените ваше укус «» на true или false! Также, если ваш единственный вызов test1.php, ваш cookie не будет установлен в 1! – Rizier123

ответ

0

Отвечая на мой собственный вопрос. Оказывается, в моем коде были 3 основные проблемы.

1) Я пытаюсь установить значение куки, делая это:

$_COOKIE['cookie[loggedin]'] = FALSE; 

Оказывается, нужно использовать setcookie(), чтобы установить значение куки. Присвоение нового значения $_COOKIE изменит значение этой переменной (в пределах той же страницы), но оно не изменит значение внутри файла cookie (вне области действия этой страницы, вызов $_COOKIE приведет к сохранению значения в cookie).

2) неправилен

echo "cookievalue" . $_COOKIE['cookie[loggedin]'] . '<br>'; 

Вместо этого он должен быть

echo "cookievalue" . $_COOKIE['cookie']['loggedin'] . '<br>'; 

3) Печенье обязательно должно быть передано значение строки. Я пытался передать значение = FALSE, которое не является строкой. Вместо этого я мог бы правильно передать значение = 'FALSE'

1

Суперглобальная переменная $ _COOKIE содержит только значения cookie. Если вы измените это значение, это не повлияет на файл cookie, потому что вам нужно отправить заголовки в браузер, чтобы сделать это.

Если вам необходимо его изменить, вы должны использовать метод setCookie, потому что это отправит заголовки с новым значением.

Примечание Помните, что $ _COOKIE только будет обновляться после использования SetCookie при обновлении страницы.

+0

Если в первый раз я делаю setcookie ('cookie [loggedin]', '', $ expiry, "", "", TRUE); а затем в будущем я делаю что-то вроде setcookie ('cookie [loggedin]', 'cookievalue'); ... тогда будет истечение $ expiry и secure = TRUE автоматически заполняется из первого утверждения? –

+0

Каждый раз, когда вы вызываете setcookie, вы будете отправлять через заголовки cookie. Это означает, что старые файлы cookie заменяются новым. Я думаю, если вы хотите сохранить $ expire и secure = TRUE, вы должны отправить его снова – Miguel

1

Так это должно работать:

Файл: headersessioncookie.php

<?php 

    //Session 
    session_start(); 

    if (!isset($_SESSION['loggedin'])) 
     $_SESSION['loggedin'] = FALSE; 

    //Cookie 
    $expiry = time()+60*60*9000; 

    if (!isset($_COOKIE['cookieloggedin'])) 
     setcookie('cookieloggedin', '', $expiry, "", "", true); 

?> 

Файл: test.php

<?php 
    require_once('headersessioncookie.php'); //start session and cookie 

    $_SESSION['loggedin'] = TRUE; 
    setcookie('cookieloggedin', '1', $expiry, "", "", true); 

?> 

Файл: test1.php

<?php 
    require_once('headersessioncookie.php'); //start session and cookie 

    echo "sessionvalue" . $_SESSION['loggedin'] . '<br>'; 
    echo "cookievalue" . $_COOKIE['cookieloggedin'] . '<br>'; 

?> 

Пожалуйста извещение тоже:

-Как обновить печенье: https://stackoverflow.com/a/6487597/3933332

-является Case Sensitive Cookie: https://stackoverflow.com/a/11312272/3933332

Смежные вопросы