PHP设置COOKIE,用JQUERY COOKIE插件更改,不能用PHP编辑


PHP sets COOKIE, changed with JQUERY COOKIE plugin, cannot be edited with php?

我使用一些简单的代码作为测试,因为我的页面不工作,也许我错过了什么?!我有谷歌这个问题,并在这里搜索,但似乎没有人提到它!甚至在饼干图上我也读过!

我有一个简单的setcookie PHP代码行:

<?php 
if($_COOKIE['PHP1'] !== 'php'){
$blah = setcookie('PHP1','php',time() + (1000 * 120),'/','',false,false);}
?>

它位于任何html之前的页面顶部并将cookie PHP1设置为php就可以了;

然后在body上有一些代码:

<?php 
if($blah){echo 'PHP1 has been set';}
else {
    echo 'cookie php1 = ' . $_COOKIE['PHP1'];}
?>

告诉我cookie是否被设置,或者如果设置了,值是多少。直接和工作良好…

(页面有jquery和jquery插件:COOKIE:链接;)然后,使用控制台检查cookie的值,并使用cookie插件更改值,代码如下:

$.cookie('PHP1');
--"php"
$.cookie('PHP1','javascript', { expires: 7, path: '/' });
--"PHP1=javascript; expires=Sat, 09 Mar 2013 19:00:57 GMT; path=/"
$.cookie('PHP1');
--"javascript"

到这里都很好,所以我刷新页面,php告诉我,正如预期的PHP1设置;然后再次刷新希望看到php1 = php,但它只是说php1已设置!

如果我编辑PHP代码只是为了显示PHP1的值,它告诉我PHP1的值是javascript?

我做错了什么吗?或者仅仅是javascript篡改后我不能用PHP编辑cookie ?(我猜可能是安全问题?)

cookie本身不是用于任何登录或安全功能,它只是用于可访问性-文本大小-色盲设置。我希望能够使用这两个incase javascript是/被禁用的任何原因!

Thanks in advance

编辑

ok,我已经查看了我的本地主机在chrome浏览器的cookie,有两个PHP1 cookie:

Name:   PHP1
Content:    php
Domain: localhost
Path:   /
Send For:   Any kind of connection
Accessible to Script:   Yes
Created:    Saturday, 2 March 2013 19:01:21
Expires:    Monday, 4 March 2013 04:21:21

Name:   PHP1
Content:    javascript
Domain: localhost
Path:   /Cookie_test
Send For:   Any kind of connection
Accessible to Script:   Yes
Created:    Saturday, 2 March 2013 18:50:08
Expires:    When the browsing session ends

我认为第二个,/Cookie_test路径,是javascript的一个!如果这是问题,我怎么能让javascript把路径写成"/"而不是dir呢?正如你可以从我的代码中看到的,我给它的路径为"/"?

实际上是因为我没有像在php中那样添加第五个选项吗??

对于@MIIB的评论,PHP的setcookie()函数和$_COOKIE的超全局变量不直接交互。

如手册"常见缺陷"中所述:

直到下次加载该cookie应该可见的页面时,cookie才会变得可见。

有效地,$_COOKIE创建在PHP脚本的最开始基于cookie 从浏览器收到;另一方面,setcookie()定义了当脚本发送输出时,哪些cookie将被发送到浏览器

您可能希望将setcookie调用包装在覆盖$_COOKIE的东西中(或者,更好的是,使用getCookiesetCookie方法拥有自己的对象)。

EDIT:作为直接写入$_COOKIE的函数的一个非常简单的例子:

function set_cookie_and_superglobal($cookie_name, $cookie_value)
{
    // For simplicity, this hard-codes the same parameters as the code in the question, and just generalises the name and value
    setcookie($cookie_name, $cookie_value, time() + (1000 * 120),'/','',false,false);
    $_COOKIE[$cookie_name] = $cookie_value;
}

我的问题,正如这里讨论的是由于本地主机!!如果我使用我的环回(127.0.0.1),它可以完美地工作,正如我所说的那样。我读到它与"没有"有关。在本地主机和一些浏览器(如chrome)不喜欢它!!

部分问题是,jquery将读取php cookie,然后设置自己的第二个cookie与额外的细节在路径编辑在我的问题。然后Php会读取这个,因为它应该,但当设置cookie再次"编辑"它的旧cookie,但仍然从Jquery cookie读取!!