1

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

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

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

它在任何 html 之前的页面顶部,并将 cookie PHP1 设置为 php 就好了;

然后我在正文上有一些代码:

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

告诉我是否设置了 cookie,或者如果设置了,值是什么。直截了当,工作正常...

(页面有 jquery 和 jquery 插件 :COOKIE:linked;)然后,我使用控制台检查 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 本身不用于任何登录或安全功能,它仅用于可访问性 - 文本大小 - 色盲设置。我希望能够同时使用这两种情况,以防 javascript 因任何原因被/被禁用!

提前致谢

编辑

好的,我已经在 chrome 中查看了我的 localhost 的 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 中那样添加第 5 个选项吗?

4

2 回答 2

2

为了扩展@MIIB 的评论,PHPsetcookie()函数$_COOKIE超全局不直接交互。

正如“常见陷阱”下的手册所述:

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

实际上,$_COOKIE在 PHP 脚本一开始就根据从浏览器接收到的 cookie 创建;setcookie()另一方面定义当脚本发送其输出时哪些 cookie 将被发送到浏览器。

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

编辑:作为这种直接写入的函数的一个非常简单的例子$_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;
}
于 2013-03-02T19:53:18.797 回答
0

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

部分问题是 jquery 会读取 php cookie,然后设置自己的第二个 cookie,其中包含我在问题中编辑的路径中的额外详细信息。然后 PHP 会按照它应该的方式读取这个但是当再次设置一个 cookie 时会“编辑”它的旧 cookie 但仍然从 Jquery cookie 中读取!!!

于 2013-03-02T22:05:39.707 回答