我一直在谷歌这一段时间,我已经一遍又一遍地检查我的代码,仍然没有线索。PHP cookie和会话不保留
这是处理:
我有一个多语言的网站。当点击不同的语言偏好时,我将它传递给?lang=en
,大概是这样。
然后,代码使用GET读取语言,启动会话并创建一个名为“lang”的cookie。
目前为止还不错,实际上它工作得很完美。
我想创建一个子域名,所以我知道了,我想通过子域使用相同的cookie,我发现我可以使用(名称,值,时间,'/','.domain .com')
它从来没有工作,所以我恢复正常:(名称,价值,时间),就是这样。我曾经没有路径或域值。实际上,它与其他网站的工作方式相同。
长话短说,恢复更改后,我无法获得存储在浏览器中的会话或cookie。我查看了存储的信息,并且没有该网站的会话或cookie。
回答:是的,我启用了cookies,另外,我的其他网站运行良好,其他使用cookie的公共站点也正常工作。
我已经尝试使用回声打印cookie和会话值,仍然没有运气。
这里是我的把手部分代码:
<?php
session_start();
header('Cache-control: private'); // IE 6 FIX
if(isSet($_GET['lang']))
{
$lang = $_GET['lang'];
// register the session and set the cookie
$_SESSION['lang'] = $lang;
setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang']))
{
$lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang']))
{
$lang = $_COOKIE['lang'];
}
else
{
$lang = 'es';
}
switch ($lang) {
case 'en':
$lang_file = 'lang.en.php';
$lang_dir = 'en';
break;
case 'es':
$lang_file = 'lang.es.php';
$lang_dir = 'es';
break;
default:
$lang_file = 'lang.en.php';
}
include_once 'languages/'.$lang_file;
?>
这一个是实际工作,因为我用这和作品:
<?php
$page = $_GET['page'];
if (!empty($page)) {
$content .='html/'. $lang['DIR_PATH']. '/'. $page. '.html';
include($content);
}
else {
include('html/'. $lang['DIR_PATH']. '/'. 'home.html');
}
?>
使用链接
index.php?lang=en
前面的代码读取“en”值,但只要我点击任何链接,它就会变为“es”。
如果include文件不起作用,$ lang ['DIR_PATH']将不起作用,并且不会显示任何内容。你同意吗?或者我错了?但它确实并且成功地改变了语言。事情是,我无法保持首选项存储。
在此先感谢
我的猜测是你正在处理冲突的cookies。您可能有两个Cookie,一个用于子域,另一个用于域。一个可能会覆盖另一个。尝试删除此域和子域的所有Cookie。 – alepage
非常感谢您的回复和您的时间。 其实我试过,清除Cookies和任何网站缓存或存储已完成。 另外,子域实际上不再存在,以防它与任何事物发生冲突。 当我查看我的cookie信息时,通常会存储一个SESSION项目,但这次没有任何内容。饼干甚至没有保存。他们被创造出来,但不知何故他们没有得救。 – user3659006
在你的session_start()之后尝试这样的事情吧。 :'var_dump($ _ SESSION); $ _SESSION ['blah'] ='test';'您可以在第一次加载页面后看到“blah”条目吗?试图看看问题来自您的逻辑还是来自会话持久性。 – alepage