不保留PHP cookie和会话

时间:2014-05-21 03:05:15

标签: php session cookies include

我已经谷歌了一段时间,我一遍又一遍地审查了我的代码,仍然没有任何线索。

这是交易:

我有一个多语言网站。点击不同的语言偏好时,我会将其作为?lang=en左右传递给你。

然后,代码使用GET来读取语言,启动会话并创建一个名为" lang"的cookie。

到目前为止很好,实际上它工作得很好。

我正在考虑创建一个子域,所以我得到了它,我想通过子域使用相同的cookie,我发现我可以使用(名称,值,时间,' /&#39) ;,' .domain.com')

它从未奏效,所以我将事情恢复正常:(名称,价值,时间)就是这样。我以前没有路径或域值。实际上它与其他网站的工作方式相同。

长话短说,在恢复更改后,我无法获得存储在浏览器中的会话或cookie。我查看了存储的信息,并没有该网站的会话或cookie。

答案:是的,我启用了Cookie,此外,我的其他网站工作正常,其他使用Cookie的公共网站也正常运行。

我尝试使用echo来打印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

前面的代码读取&#34; en&#34;值,但只要我点击任何链接,它就会更改为&#34; es&#34;。

如果包含文件不起作用,$ lang [&#39; DIR_PATH&#39;]将无效,并且不会显示任何内容。你同意吗?还是我错了?但它确实成功地改变了语言。问题是我无法保存偏好。

提前致谢

1 个答案:

答案 0 :(得分:0)

哇! 最后我仔细检查了一切。 我已经得到了答案。

我意识到,不知何故(不知道为什么),我的**

  

的php.ini

**文件已被修改,现在要求使用不同的路径来保存会话。

我有人有这个问题,请转到php.ini文件并查找

session.save_path

创建特定文件夹,或更改显示在那里的路径

感谢您的阅读,无论如何,感谢您的帮助和时间。