PHP Cookies在localhost上运行良好,但它';它不在实时服务器上工作

PHP Cookies在localhost上运行良好,但它';它不在实时服务器上工作,php,cookies,localhost,Php,Cookies,Localhost,注:此问题已解决, 最后我发现那不是饼干 问题,问题在 unserialize()函数。连载 作为的参数的cookie 该函数必须是条带化的 首先 大家好,我有一个关于PHP Cookies的问题。我正在使用PHP Cookies来保存用户首选项。我已经在本地机器上测试了我的代码(使用XAMPP的本地主机)。一切都很好,包括饼干。但当我把它上传到实时服务器上时,cookies根本不起作用。setcookie()函数似乎不写入cookie值。我通过在本地主机和实时服务器上回显cookie值进行了测

注:此问题已解决, 最后我发现那不是饼干 问题,问题在 unserialize()函数。连载 作为的参数的cookie 该函数必须是条带化的 首先

大家好,我有一个关于PHP Cookies的问题。我正在使用PHP Cookies来保存用户首选项。我已经在本地机器上测试了我的代码(使用XAMPP的本地主机)。一切都很好,包括饼干。但当我把它上传到实时服务器上时,cookies根本不起作用。setcookie()函数似乎不写入cookie值。我通过在本地主机和实时服务器上回显cookie值进行了测试$_localhost上的COOKIE[]值正在显示,但未与live server中的值一起显示

我想这可能与$expire时区有关,就像这篇文章中的一样。但后来我意识到我已经将cookies设置为在一个月内过期,而不是像在那篇博文中那样只在一小时内过期。所以我认为情况并非如此

这是setting.php的内容

<?php
$defaultSettings['default_post_to'] = 'both';
$defaultSettings['timesince_style'] = 'simplify';
...
$defaultSettings['display_geo_info'] = 'true';
$defaultSettings['enable_javascript'] = 'true';

if(!isset($_COOKIE['settings'])){
    setcookie("settings", serialize($defaultSettings), time()+3600*24*30);
    header('Location: index.php');
}
$setting = unserialize($_COOKIE['settings']);
?>

这是index.php的内容

<?php
/*
ini_set ("display_errors", "1");
error_reporting(E_ALL);  
*/

session_start();

require_once("settings.php"); // Settings files
require_once('varlib.php'); // Get all possible passed variable
require_once('auth.php'); // Check for channel login status

// If inputbar form submitted
if( $_POST['inputbox'] ){
...
}
else{
    echo "SETTING COOKIE: <br/><br/>";
    // This print_r is only showing the $_COOKIE value (which is stored on $setting) on localhost but no on live server
        print_r($setting);
    switch( $com ){
        ...
    }
}
?>

我到处都在搜索它(谷歌、stackoverflow、在twiiter/FB上问朋友),但仍然没有解决方案

我希望有人能在这里给我答案 谢谢:)

试试这个:

setcookie("settings", serialize($defaultSettings), time()+3600*24*30, '/'); // added path
setcookie("settings", serialize($defaultSettings), 0);

另外,是否
serialize($defaultSettings)
结果太大?

查看setcookie函数的路径和域参数。 参考:setcookie@PHP文档

尝试以下方法设置cookie:

if ($on_localhost) { // change this
    $domain = '.localhost';
} else {
    $domain = '.webhoster.com'; // change this
}
setcookie(
    'settings',
    serialize($defaultSettings),
    time()+3600*24*30,
    '/',          // this is the path
    $domain       // this is the domain
);
祝你好运

在位置标题后尝试退出()


位置标头不会阻止PHP脚本执行进一步的指令,可能是标头之后执行的某些内容导致了错误行为。

可能是您的服务器时间不正确,因此CookeI无法在服务器上工作

试试这个:

setcookie("settings", serialize($defaultSettings), time()+3600*24*30, '/'); // added path
setcookie("settings", serialize($defaultSettings), 0);

在这种情况下,将过期时间设置为零将解决您的问题。或者更新您的服务器时间。

在应用解决方案时,我们忘记了Cookie的基本功能

Cookie就像标题一样。与头文件一样,它应该在生成任何输出之前发送。那么只有它设置成功。我为这个问题做了很多努力,但当我完成了基础知识后,这个问题很快就解决了

此语法将足以解决此问题

setcookie(
'settings',
serialize($defaultSettings),
time()+3600*24*30,
'/'          // this is the path
);

仅在setcookie()之前初始化ob_start()方法。大多数开发者ob_start()方法都包含在配置文件中。

您是否尝试过setcookie()的路径和域参数?如果启用错误报告,您不会收到任何错误消息?@Kamal:比较本地服务器和实时服务器的
phpinfo()
会话部分的输出(其中也显示了cookie设置)。@rik:还没有,我会尽快尝试,在堆栈溢出时,当您解决了自己的问题时,您应该将该解决方案作为答案发布,并将其标记为已接受,而不是在问题标题前加上“[已解决]”,谢谢您的提示。我发现问题似乎与serialize()/unserialize()函数有关。serialize函数确实起作用,但unserialize()函数似乎什么也不返回。真的是因为太大了吗?Cookie的大小通常限制在4KB以内