我正在使用以下语法在localhost上设置cookie
setcookie("testCookie ", "hello cookie", false, "/", false);
问题是我第一次访问页面时创建了cookie并且firebug显示了
Cookie testCookie added. hello cookie
但它没有读取价值。如果我刷新页面,则读取值并显示火灾错误
Cookie testCookie changed. hello cookie
如何在第一次加载页面时获取cookie的值?
答案 0 :(得分:10)
正如我在评论中提到的那样(虽然相当模糊且不太容易理解),但我认为问题可能是您在将cookie发送到服务器之前尝试读取cookie。
Cookie的工作方式如下:
如果您还没有尝试过,请再次刷新!
由于您想要在设置它的同时阅读它,只需存储您正在设置的值并使用它。或者(虽然这是未经测试的),您可以在$_COOKIE
数组中手动设置它。
这样的事情:
setcookie("helloworld", .. );
$_COOKIE['helloworld'] = $value;
然后你可以正常阅读。请注意,我不会真的建议覆盖自动超全局的值(同样适用于$_REQUEST
,$_POST
,$_GET
等等,而是建议您只存储你设定和使用它的价值。
另一种方法是使用“网关”形式,这意味着您将在网关页面上设置cookie,然后将继续将您重定向到下一页。
例如,假设您的流量如下:login.php
- > account.php
。而不是将您的登录表单直接发送到account.php
,您有2个选项。
选项1:POST回login.php,设置cookie,然后重定向到account.php
。
选项2:拥有一个网关,例如logincheck.php
,POST到该网关,设置cookie,然后重定向到account.php
。
这样,account.php
始终可以看到您的Cookie。
答案 1 :(得分:3)
它可能是相关的,但是您要为需要整数或字符串的参数赋予布尔值。如果您是PHP新手,请务必仔细阅读本手册并了解功能签名。在这种情况下,您必须检查http://php.net/setcookie,您可以在这里阅读:
bool setcookie(string $ name [, string $ value [,int $ expire = 0 [, string $ path [,string $ domain [,bool $ secure = false [,bool $ httponly = false]]]]]])
另外,我在运行代码时收到警告:
Warning: Cookie names cannot contain any of the following '=,; \t\r\n\013\014'