0

我有以下代码:

<?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 变量不保留值。输出如下:

注意:未定义索引:第 13 行 /home/claudio/public_html/index.php 中的 lang Array ( ) Array ( [get] => get ) Array ( [lang] => en [PHPSESSID] => c92d58e58508gvjf2urfmr9uh3 ) 注意:未定义索引:第 23 行 /home/claudio/public_html/index.php 中的 lang

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

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

如果我这样做echo session_start();它返回 1,那么会话可能有什么问题?

4

1 回答 1

1

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

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

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

于 2012-11-13T10:45:19.937 回答