注意:此问题已经解决, 最后我发现它不是饼干 问题,问题是 unserialize()函数。序列化 作为参数的cookie 该功能必须是striplash-ed 第一
您好,我在这里有关于PHP Cookie的问题。我正在使用PHP Cookie来保存用户首选项。我已在本地计算机上测试了我的代码(使用XAMPP的localhost)。一切都很好,包括饼干。但是当我将它上传到实时服务器时,cookie根本不起作用。似乎setcookie()函数不会写入cookie值。我通过在本地主机和我的实时服务器上回显cookie值来测试。 localhost上的$ _COOKIE []值显示但不显示实时服务器中的值。
我想也许这与$ expire时区有关,就像这篇帖子http://anupraj.com.np/index.php/php-cookies-not-working-php-cookie-tutorial-and-scirpt/14中的那个。但后来我意识到我已经将cookie设置为在1个月后到期,而不仅仅是在那篇博客文章中的一小时内。所以我认为情况并非如此。
这是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 ){
...
}
}
?>
我到处搜索它(Google,stackoverflow,在twiiter / FB上询问朋友)仍然没有解决方案
我希望有些机构能在这里给我解决方案 谢谢:))
答案 0 :(得分:1)
查看setcookie函数的路径和域参数。 参考:setcookie @ PHP docs http://php.net/manual/en/function.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
);
祝你好运!
答案 1 :(得分:0)
试试这个:
setcookie("settings", serialize($defaultSettings), time()+3600*24*30, '/'); // added path
另外,serialize($defaultSettings)
结果可能太大了吗?
答案 2 :(得分:0)
在Location-header之后尝试exit()
。
Location-header不会阻止PHP脚本执行进一步的指令,也许在标题之后执行会导致错误行为的事情。
答案 3 :(得分:0)
可能您的服务器时间不正确,因此Cookeis无法在服务器上运行。
试试这个:
setcookie("settings", serialize($defaultSettings), 0);
将过期设置为零将解决您的问题。或者更新服务器时间。
答案 4 :(得分:0)
在应用解决方案时,我们忘记了Cookie的基本知识。
Cookie就像标题一样。与标题一样,它应该在任何输出生成之前发送。然后只有它成功设置。我为这个问题苦苦挣扎但是当我完成基础知识时,这个问题很快就得到了解决。
这种语法足以解决这个问题...
setcookie(
'settings',
serialize($defaultSettings),
time()+3600*24*30,
'/' // this is the path
);
答案 5 :(得分:0)
仅在setcookie()之前初始化ob_start()方法。大多数开发人员的ob_start()方法都包含在配置文件中。