【问题标题】:Issue persisting session variables across pages跨页面发布持久会话变量
【发布时间】: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


【解决方案1】:

找到答案 - 我习惯于使用经典的 ASP 和 .net 进行编码,它们不需要一行来初始化会话。解决方案是将session_start() 放在主包含文件中。

【讨论】:

  • 哇经典的 ASP :) 仍然有网站保持 10 年的死技术:)))
  • 大声笑是的 - 我们的产品之一是用经典的 ASP 编写的。关于用另一种语言重建它的争论一直存在,但它非常稳定,我们认为没有必要这样做。
猜你喜欢
  • 1970-01-01
  • 2015-12-06
  • 1970-01-01
  • 2015-08-16
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多