PHP会话不保留值

时间:2015-05-24 15:04:20

标签: php session

我的PHP(5.6版)会话有问题。它们不会保留在页面之间,甚至在我刷新页面时也是如此。

除了我的所有文件之外:

<?php
session_start();

(之前没有空格或任何东西)。

当用户点击链接时,它会调用一个函数将网站语言设置为英语或法语。在对$ _GET [“lang”]值进行一些验证后,我创建了类似的会话:

$_SESSION["lang"] = $_GET["lang"];

如果我这样做

var_dump($_SESSION["lang"]);

服务器返回字符串(2)“fr”或字符串(2)“en”关于用户选择哪种语言。在那之前,一切都很好;)

问题是如果我刷新页面,或者转到另一个页面,并尝试返回会话值,它总是为空......

我知道我可以使用其他方式翻译网站,但我需要会话才能使用我的应用程序的其他功能(登录,...)

因为它几天前工作,我首先认为它是服务器上的更改,所以我联系了我的服务器管理员,但他们告诉我他们没有改变任何东西。 我将PHP错误报告设置为E_ALL但没有显示错误...

如果有人可以帮助我,那就太棒了,我现在被困在这个bug上3天了^^。

谢谢!

编辑:

session_start();
var_dump($_SESSION["lang"]);
if(!isset($_SESSION["lang"]) || $_SESSION["lang"] == null){
    $_SESSION["lang"] = "fr";
}
if(isset($_GET["lang"]) && ($_GET["lang"] == "fr" || $_GET["lang"] == "en")){
    $_SESSION["lang"] = $_GET["lang"];
}
var_dump($_SESSION["lang"]);

2 个答案:

答案 0 :(得分:2)

根据您提供的有限代码,我的猜测是$_GET参数不会始终设置,然后将会话设置为空。

试试这个......

if(isset($_GET["lang"])) {
    $_SESSION["lang"] = $_GET["lang"];
} else {
    echo 'lang not set';
}

编辑:OP提供了额外的代码。

这将返回&#39; fr&#39;如果没有值,或者URL参数中没有提供可接受的值。它与您所拥有的相似,但是,我将括号中的参数括起来使其更紧凑并改变了顺序。您的代码正在返回&#39; en&#39;如果没有提供任何东西。

session_start();

if(isset($_GET['lang']) && ($_GET['lang'] == 'fr' || $_GET['lang'] == 'en')) {
    if($_GET['lang'] == 'fr') {
        $_SESSION['lang'] = 'fr';
    }
    elseif($_GET['lang'] == 'en') {
        $_SESSION['lang'] = 'en';
    }
} else {
    $_SESSION['lang'] = 'fr';
}

var_dump($_SESSION['lang']);

答案 1 :(得分:1)

我找到了! 我的index.php文件是用UTF-8编码的,我把它更改为UTF-8而没有BOM,它工作正常! 真的很奇怪的bug,我希望它会帮助别人;)