我的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"]);
答案 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,我希望它会帮助别人;)