Cookie在第二次刷新之前不会设置

时间:2014-02-20 21:37:45

标签: javascript php cookies

我在第1页上有一个表单:

<form method="post" action="request-form">
<input type="text" id="amzQry" name="item" placeholder="What do you need?" autocomplete="on">
<input id="autocomplete" name="destination" placeholder="where? (e.g. Buenos Aires)" onfocus="geolocate()" type="text" required="" aria-required="true" autocomplete="off">
<button type="submit" value="" >submit</button>
 </form>

我希望这些信息以持久的方式保存,以便即使用户随后登录(在这种情况下为joomla),cookie数据也是持久的并且可以被调用。这就是我在这种情况下使用cookie而不是会话的原因。如果这不是正确的做法,请纠正我。

我有一些代码可以在第2页设置和检索cookie:

<?php
$itemcookie = $_POST['item'];
$detsinationcookie = $_POST['destination'];
setcookie( "itemcookie", $itemcookie, strtotime( '+30 days' ) );
setcookie( "destinationcookie", $detsinationcookie, strtotime( '+30 days' ) );
?>

但是,在表单提交后加载时,cookie数据不会出现在第二页上。如果我刷新第二页,数据出现在正确的位置,即我用例如。

调用的地方
<?php echo $_COOKIE["itemcookie"]; ?>

如何在第2页立即获取Cookie数据?

3 个答案:

答案 0 :(得分:2)

你不能。

如果您查看manual

Once the cookies have been set, they can be accessed on the next page load with the $_COOKIE or $HTTP_COOKIE_VARS arrays.
                                                            ^^^^^^^^^^^^^^

这意味着您的Cookie将无法在您设置它们的页面/脚本上使用。

您可以使用另一个变量来显示值,例如:

$itemcookie_value = isset($_POST['item']) ? $_POST['item'] : $_COOKIE["itemcookie"];

答案 1 :(得分:0)

显然你在调用setcookie()之前有一些输出 如果在session_start(),setcookie()或者说header()之前有一些输出(甚至是一个空格字符),浏览器将无法识别cookie,并且在脚本启动后它们将无法使用。

答案 2 :(得分:0)

可以。

您要做的就是使用AJAX请求设置cookie,这样,当您仍在页面上时就设置cookie,然后在刷新页面一次后,该cookie就可以使用了。