【发布时间】:2014-05-04 12:14:50
【问题描述】:
首先介绍一下我的设置背景:
- 我设置了一个本地域名,projects.lumesse.com。
- PHP 版本是 5.4.16,在 IIS 7 上运行。
- 在 Chrome 中测试(最新稳定版本)。
问题如下:
我有一个名为“getVariable”的函数,如下所示:
function getVariable($name, $default = "") {
if(isset($_POST[$name])) return $_POST[$name];
if(isset($_GET[$name])) return $_GET[$name];
if(isset($_SESSION[$name])) return $_SESSION[$name];
return $default;
}
逐行遍历这个函数,它会返回 post 变量(如果存在),然后是 get 变量,然后是 session 变量,然后是默认变量(如果其他变量都不存在)。
在另一个包含,它直接包含在函数包含之后,我有以下行:
$_SESSION["Language"] = getVariable("Language", "FR");
如果我输入 ?Language=DE 就可以正常工作 - 该网站按预期以德语显示。但是,从上面的行来看,如果我去掉查询字符串,我希望语言会保持不变。
第一次点击此页面时,使用 ?Language=DE,它应该返回 get 变量。上面的行然后设置会话变量。因此,在此之后对该函数的任何调用都会返回会话变量,对吧?
它实际上是在没有语言参数存在的情况下返回默认的FR,即使我已经预先设置了语言。
任何关于我所缺少的想法都将不胜感激。
【问题讨论】:
-
这种抽象让我很沮丧。你不能用简单的方法吗
if(!isset($_SESSION['Language'])) { $_SESSION['Language'] = $_GET['Language']; } else { $_SESSION['Language'] = 'FR'; } -
只是为了确定:您确定您没有忘记事先与
session_start()启动会话吗? -
好吧,我现在感觉很愚蠢 - 忘记了所有重要的
session_start()。感觉自己像个菜鸟。 -
@RoyalBg:我可以这样做,但是必须对所有变量都这样做(记住这是一个巨大的应用程序)只是很长 -
getVariable节省了大量时间并确保任何只需一次更新获取变量的方式。例如,将来我可能想从数据库中为当前用户选择一个默认值。
标签: php session session-variables