2014-05-21 190 views
0

我一直在谷歌这一段时间,我已经一遍又一遍地检查我的代码,仍然没有线索。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']将不起作用,并且不会显示任何内容。你同意吗?或者我错了?但它确实并且成功地改变了语言。事情是,我无法保持首选项存储。

在此先感谢

+0

我的猜测是你正在处理冲突的cookies。您可能有两个Cookie,一个用于子域,另一个用于域。一个可能会覆盖另一个。尝试删除此域和子域的所有Cookie。 – alepage

+0

非常感谢您的回复和您的时间。 其实我试过,清除Cookies和任何网站缓存或存储已完成。 另外,子域实际上不再存在,以防它与任何事物发生冲突。 当我查看我的cookie信息时,通常会存储一个SESSION项目,但这次没有任何内容。饼干甚至没有保存。他们被创造出来,但不知何故他们没有得救。 – user3659006

+0

在你的session_start()之后尝试这样的事情吧。 :'var_dump($ _ SESSION); $ _SESSION ['blah'] ='test';'您可以在第一次加载页面后看到“blah”条目吗?试图看看问题来自您的逻辑还是来自会话持久性。 – alepage

回答

0

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

我意识到,以某种方式(不知道为什么),我的**

的php.ini

**文件被修改,现在问了一个不同的路径保存会议。

我有人有这个问题,去php。ini文件,并查找

session.save_path 

以及创建特定的文件夹,或者更改路径显示有

感谢您的阅读,反正你的帮助和你的时间。