2012-10-07 144 views
0

在PHP中设置Cookie时出现问题。 这是我用来设置cookie的代码,如果复选框被选中。未在PHP中设置Cookie

<?php 
    if(isset($_POST['remember'])){ 
    setcookie("loggedemail",$email,"time()+3600","/"); 
    setcookie("loggedpassword",$password,"time()+3600","/"); 
    echo $_COOKIE['loggedemail']; 
    echo $_COOKIE['loggedpassword']; 
} 
?> 

这里'记住'是我用来设置cookie的复选框的ID。 这里的问题是

  • 我无法看到Chrome的资源选项卡上的饼干,当我 点击“检查元素”。
  • 我无法看到任何回声。
  • Cookie未设置。

另外,当某人退出会话时,我无法删除会话cookie。 session_destroy();似乎没有做到这一点,因为Chrome仍然显示Cookie设置为活动状态。

我该如何解决这些问题?

回答

0

您将时间作为字符串传递。这里有问题,所以改变你的php代码如下

setcookie("loggedemail",$email,time()+3600,"/"); 
setcookie("loggedpassword",$password,time()+3600,"/"); 

Cookie不是会话的一部分,所以你不能使用session_destroy()。

如果你想删除的cookie,那么你必须将时间设置为过去的时间如下

setcookie("loggedemail", "", time()-3600); 
+0

对不起,我已将名称属性设置为“记住”,而不是id。我的错。但是,我仍然不确定为什么cookie没有被创建。 我通过按代码建议的时间来检查。还有什么想法? – palmi

+0

你在var_dump($ _ POST)中得到了什么?你是否获得了$ email&$密码的价值? – GBD

0

session_destroy()不取消在它的会话ID cookie的,它只是象垃圾一样清除会话数据。

你说复选框的id属性是'remember' - 它是否有名称属性?如果不是这就是为什么一切都不工作的id不会发布到每个HTML定义的表单操作。

0

如果你不喜欢这样写道:

setCookie("cookieName", "value", time() + 3600); 

它的工作(如果你没有改变任何浏览器设置)。但是,该变量在下一次加载页面之前不可用。不过,您应该可以在Chrome开发工具中看到它。如果没有,请在设置cookie之前确保100%不输出任何内容。

关于你的第二个问题,session_destroy()销毁了一个会话,但它不会使已经发送给客户端的cookie失效。您需要通过设置其到期时间手动使其失效。

1

$_COOKIE的值通过读取从浏览器接收到的cookie进行设置。

为了从浏览器接收cookie,必须:在PHP中设置 - >浏览器应该加载 - >用户应该导航到下一页(或提交表单)。

所以基本上如果你使用setcookie你不能读$_COOKIE,直到下一次刷新。这就是为什么echo没有显示任何东西。他们显示NULL - 确认这个使用var_dump,你会看到输出。