【问题标题】:Cookies in subdomain doesnt work子域中的 Cookie 不起作用
【发布时间】:2010-11-24 15:21:04
【问题描述】:

我得到以下代码:

<?php
$id = $_GET['id'];
$vote = $_GET['vote'];
$month = 2592000 + time();
$cookie = "votez" . $id;
$cookiez = "viewz" . $id;

if(isset($_COOKIE[$cookiez]))        
{
    if(!isset($_COOKIE[$cookie]))        
    {
        setcookie($cookie, "voted", $month, '/', ".mywebsite.co.il");
    }
}
else
{
        setcookie($cookiez, "viewed", $month, '/', ".mywebsite.co.il");
}

?>

假设我去 > www.mywebsite.co.il/example.php?id=1&vote=1 第一次 > 它将设置第一个 cookie。 第二次 > 它将设置第二个 cookie。 第三次 > 什么都不会发生

它应该是这样工作的。

但如果我去 > www.mywebsite.co.il?/example.php?id=1&vote=2(在我访问 www.mywebsite.co.il/example.php?id=1&vote=1 之后) 它将再次设置第一个 cookie。

如果我要去 > www.mywebsite.co.il?/example.php?id=1&vote=3(在我访问 www.mywebsite.co.il/example.php?id=1&vote=1 之后) 它将再次设置第一个 cookie。

等等..

无论票数相等,只要ID相同,cookie就会相同,我需要做什么?

(这不是完整的代码,您不需要完整的代码来理解或解决问题)。

谢谢!

【问题讨论】:

  • 这里的子域在哪里? o_o
  • @Chouchenos 看起来像一个 unicode 域名 - חרי שנכנסתי ל.mywebsite.co.il
  • @Orbling :我在 חרי שנכנסתי ל 和 mywebsite.co.il 之间没有看到 .,但我可能需要眼镜
  • @Chouchenos 因为它是一个从右到左的字母表与 LtR 混合在一起,所以至少在 Chrome 中它确实搞砸了选择。
  • @Orbling 的意思是“在我进入之后”——他错误地开始用希伯来语写作并将其编辑回英文;这里没有 unicode 国际化域。

标签: php


【解决方案1】:

不管怎样,看看这个http://labs.shikiryu.com/test-cookie.php

<?
$id = "1";
$vote = "2";
$month = 2592000 + time();
$cookie = "votez" . $id;
$cookiez = "viewz" . $id;

if(isset($_COOKIE["$cookiez"]))        
{
    if(!isset($_COOKIE["$cookie"]))        
    {
        var_dump(setcookie("$cookie", "voted", $month, '/', ".shikiryu.com"));
        echo "2nd cookie set :".$month;
    }
}
else
{
        var_dump(setcookie("$cookiez", "viewed", $month, "/", ".shikiryu.com"));
        echo "1st cookie set :".$month;
}

您如何检查您的 cookie?因为,例如,在 Firefox 中,您必须查找您的域(而不是您的子域)。在 chrome 中,ctrl+I,存储选项卡。

你能不能在你的服务器上试试这个代码,然后回来告诉我们它是否有效,它可能来自你的 unicode 域名。


我已将代码更改为(相同的网址):

<?
$id = $_GET['id'];
$vote = $_GET['vote'];
$month = 2592000 + time();
$cookie = "votez" . $id;
$cookiez = "viewz" . $id;

if(isset($_COOKIE["$cookiez"]))        
{
    if(!isset($_COOKIE["$cookie"]))        
    {
        var_dump(setcookie("$cookie", "voted ".$vote, $month, '/', ".shikiryu.com"));
        echo "2nd cookie named ".$cookie.". is set to :voted ".$vote;
    }
}
else
{
        var_dump(setcookie("$cookiez", "viewed ".$vote, $month, "/", ".shikiryu.com"));
        echo "1st cookie named ".$cookiez." set to : viewed ".$vote;
}

如果你尝试:

  1. http://labs.shikiryu.com/test-cookie.php?id=1&vote=1 你将拥有bool(true) 1st cookie named viewz1 set to : viewed 1
  2. http://labs.shikiryu.com/test-cookie.php?id=1&vote=3 => bool(true) 2nd cookie named votez1. is set to :voted 3
  3. http://labs.shikiryu.com/test-cookie.php?id=1&vote=2 => 不会显示任何内容,因为两个 cookie 都已设置。

【讨论】:

  • $vote = 2 所以投票总是一样的,就像我之前说的,如果投票总是一样的话,它对我有用......
  • @Ron : 你并没有将$vote 保存在你的 cookie 中……你在其中保存了“投票”……
  • @Chouchenos 你的意思是写“viewed”.$vote 和“voted”.$vote 还是“viewed”.$id 和“voted”.$vote?
  • @Ron :因为从您的代码中您只需在您的 2 个 cookie 中注册“投票”或“查看”而没有其他任何内容,我想向您展示这一点,因为 $_GET['vote'] 不是在你的代码中使用,你可以把它放在你的 cookie 中。我可能错了。 无论如何我的两个 cookie 都只保存了一次,它们的第一个值是它们的第一个值,并且不会在询问它们是否获得相同的 id 时重置。如果您想要更详细的答案,请通过编辑您的问题更具体地“再次设置第一个 cookie”,否则我们无能为力。
  • @Chouchenos 您是否也将您网站中的代码更改为您上次编辑的代码?
猜你喜欢
  • 1970-01-01
  • 2012-02-23
  • 2013-01-14
  • 2014-02-21
  • 2012-12-04
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 2017-07-30
相关资源
最近更新 更多