0

我不明白这一点,因为这对我来说似乎很奇怪 - cookie:没有我在第一次执行时设置的数据。

我的代码,

$booking_time = '12:00';

$timeslots = array(
    array(
        "12:00",
        "12:30",
        "13:00",
        "13:30",
        "14:00",
        "14:30"
    ),
    array(
        "15:00",
        "15:30",
        "16:00",
        "16:30",
        "17:00",
        "17:30"
    )
);
//print_r($timeslots);

$selected_timeslot_start = null;
$selected_timeslot_end = null;
$selected_date = '2013-10-30';

foreach($timeslots as $index => $timeslot)
{
    if(in_array($booking_time, $timeslot)) 
    {
        $selected_timeslot_start = $timeslot[0].':00'; // first item.
        $selected_timeslot_end = end($timeslot).':00'; // last item
        //echo 'from = '.$timeslot[0];
        //echo ' to = '.end($timeslot);
        //print_r($timeslot);

        setcookie("selected_timeslot_start", $selected_timeslot_start, time()+1800 , '/');
        setcookie("selected_timeslot_end", $selected_timeslot_end, time()+1800 , '/');
        setcookie("selected_date", $selected_date, time()+1800 , '/');

    }
}
print_r($_COOKIE);

我明白了,

Array
(
    [__atuvc] => 46|39
    [PHPSESSID] => olvlb3sv6bscvbpkva4d9ev6p3
)

然后我在浏览器上点击刷新,我得到了所有的数据,

Array
(
    [__atuvc] => 46|39
    [PHPSESSID] => olvlb3sv6bscvbpkva4d9ev6p3
    [selected_timeslot_start] => 12:00:00
    [selected_timeslot_end] => 14:30:00
    [selected_date] => 2013-10-30
)

为什么 - 有人能告诉我我在 cookie 上做错了什么吗?

4

3 回答 3

1

是的,这是正确的行为,当您设置cookie时,它将被发送到客户端(浏览器)并设置,因此,第一次设置cookie,浏览器不会将任何cookie发送回服务器,而第二次此时,浏览器会在 HTTP REQUEST Header 中包含 cookie,因此,您将看到完整的数据。

PHPSESSID 与会话有关,您可能以前使用过它。

于 2013-09-29T08:55:52.710 回答
1

好吧,一方面你不应该在路径参数中使用撇号..它应该是

setcookie("selected_date", $selected_date, time()+1800 , "/" );

除此之外,我认为您设置 cookie 或检索数据的方式没有错误。尝试更改您的路径设置方式并让我知道您的结果。

于 2013-09-29T09:37:24.350 回答
0

cookie保存在客户端,由浏览器设置,当你向webserver发送http请求时,浏览器会得到请求域的cookie发送给webserver(cookie包含在http header中);webserver会返回一个响应信息, 标头可能包含如下 cookie 信息:

Set-Cookie: set_cookie=set_value    

然后浏览器将设置cookie并保存它。功能 setcookie 只是将 cookie 信息添加到 http 响应消息的标题中。

于 2013-09-29T09:28:14.207 回答