PHP会话启动但不保留值

时间:2012-11-13 10:37:47

标签: php session-variables

我有以下代码:

<?php
ini_set('display_errors', 'On');error_reporting(E_ALL | E_STRICT);
session_start();
set_include_path('../include');
if(isset($_GET["lang"])
    && $_GET["lang"] != $_SESSION["lang"]
    && ($_GET["lang"] == 'en' || $_GET["lang"] =='pt')){
$_SESSION["lang"]= $_GET["lang"];
setcookie("lang", $_GET["lang"]);
}
if(!isset($_SESSION["lang"])){
    if(isset($_COOKIE["lang"])){
    echo $_SESSION["lang"] == $_COOKIE["lang"];
    } else {
        switch(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)){
        case 'pt': $_SESSION["lang"] = "pt";setcookie("lang", $_SESSION["lang"]); break;
        default: $_SESSION["lang"] = "en";setcookie("lang", $_SESSION["lang"]);
        }

    }
}
print_r($_SESSION);print_r($_GET);print_r($_COOKIE);
require('lang/'.$_SESSION["lang"].'.php');
?>

但由于某种原因,$ _SESSION变量不保留值。输出如下:

  

注意:未定义的索引:lang in /home/claudio/public_html/index.php   第13行Array()数组([get] =&gt; get)数组([lang] =&gt; en   [PHPSESSID] =&gt; c92d58e58508gvjf2urfmr9uh3)注意:未定义的索引:   lang in /home/claudio/public_html/index.php on line 23

     

警告:require(lang / .php):无法打开流:没有这样的文件或   第23行/home/claudio/public_html/index.php中的目录

     

致命错误:require():无法打开所需的'lang / .php'   (include_path ='.. / include')在/home/claudio/public_html/index.php上   第23行

如果我echo session_start();它返回1,那么会话的问题是什么?

1 个答案:

答案 0 :(得分:1)

如果未设置$_GET["lang"]$_SESSION["lang"]且设置了$_COOKIE["lang"],则执行的唯一操作是:

echo $_SESSION["lang"] == $_COOKIE["lang"]; //maybe this should be a '='?

如果不是这种情况,也许您应该检查/ var / php_sessions中的会话保存路径是否可由Web服务器写入。