【问题标题】:how to set variables in a session?如何在会话中设置变量?
【发布时间】:2012-12-18 23:04:57
【问题描述】:

您好,我想使用会话来设置语言设置。

所以我会从 http_language_accept 获得首选语言:

if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])){
    $max   = 0.0;
    $languages = explode(",", (strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"])));
    foreach($languages as $language){
        $language = explode(';', $language);
        $q    = (isset($language[1])) ? ((float) $language[1]) : 1.0;
        if ($q > $max){
            $max = $q;
            $pref_language = $language[0];
        }
    }
    $pref_language = trim($pref_language);
}

现在我想检查是否已经保存了之前访问保存的设置:

if (isset($_SESSION['pref_lang'])){
    $_SESSION['pref_lang'] = $pref_language;
}

这是第一个问题。调用页面时会显示错误500。

我还想在发送 $_POST 时更改 $pref_language:

所以我有这个代码:

$one = $_POST['one'];

if(isset($_SESSION['pref_lang']) AND isset($one) ){
    $_SESSION['pref_lang'] = 'one';
    $_SESSION['pref_lang'] = $pref_language;
}

如果有人能告诉我这是否是在使用会话时设置和更改变量的正确方法,那就太好了。

非常感谢。

更新:

关于答案,我使用了用户 olaf Dietsche 的方法。

所以我就这样做了:

if (!isset($_SESSION['pref_lang'])){ //if the session does not exist
    if (isset($pref_language)){ //but the given $pref_language from above
        $_SESSION['pref_lang'] = $pref_language; //the session will be registered with the value of $pref_language
    }
}else{ 
    if (isset($_SESSION['pref_lang'])){ //in case of that an existing session from a previous visit
        if (isset($pref_language)){ //and the pref_language is set from above
            $_SESSION['pref_lang'] = $pref_language; //the session will be given a variable
            if (isset($one)){ // this will be the problem now when isset $_post 
                    $pref_language = 'one'; //$pref_language or even session will get a new value
                }
                if (isset($two)){
                    $pref_language = 'two';
                }



}

【问题讨论】:

  • it will display error 500 检查您的错误日志以查看消息。
  • 错误 500 不太可能是由会话引起的。它可能是一些服务器错误,您可以先检查那里是否存在 .htaccess。它可能有问题。
  • 不会显示错误日志。我使用了error_reporting(E_ALL);但不会定向..会说网站编码错误。
  • @techie_28 PHP 错误可能会在某些设置中导致 500 错误。我的大学运行 suEXEC 的服务器在 PHP 错误时会报错 500。

标签: php html session session-variables


【解决方案1】:

当您查看您的网络服务器日志时,您将看到具体的错误消息。

我猜,在

if (isset($_SESSION['pref_lang'])){
    $_SESSION['pref_lang'] = $pref_language;
}

$pref_language 未设置。尝试将其更改为

if (isset($_SESSION['pref_lang'])){
    if (isset($pref_language))
        $_SESSION['pref_lang'] = $pref_language;
    else
        echo 'pref_language is not set';
}

并查看错误是否消失。否则,如上所述,请查看您的服务器日志。

您无需再次检查 else 部分中的 isset($_SESSION['pref_lang']),因为您已经在 if 部分中这样做了。

session_start();
...
if (!isset($_SESSION['pref_lang'])){ //if the session does not exist
    if (isset($pref_language)){ //but the given $pref_language from above
        $_SESSION['pref_lang'] = $pref_language; //the session will be registered with the value of $pref_language
    }
}else{ 
    //in case of that an existing session from a previous visit
    if (isset($pref_language)){ //and the pref_language is set from above
        $_SESSION['pref_lang'] = $pref_language; //the session will be given a variable
        if (isset($one)){ // this will be the problem now when isset $_post 
            $pref_language = 'one'; //$pref_language or even session will get a new value
        }
        if (isset($two)){
            $pref_language = 'two';
        }
    }

【讨论】:

  • 您好,感谢您回答这个问题。尽管添加了括号,但它不会回显任何内容。我也手动取消了会话。
  • 忘了说错误消失了,但是当调用这个站点时它不会显示任何东西。当我打电话并打印它时,会话是空的。
  • @bonny 错误是在 更改代码之后消失了,还是在没有更改任何内容的情况下消失了?当您没有看到任何输出时,请查看服务器日志以查看问题所在。
  • 改代码后错误消失。现在我明白你背后的逻辑了。所以我会更新我的问题以显示详细信息。
  • @bonny 查看修改后的答案。代码到目前为止应该可以工作,但是为什么设置了$_SESSION['pref_lang']之后还要修改$pref_language
【解决方案2】:

你不能检查if (isset($_SESSION['pref_lang']))

但你必须像那样通过帖子检查

  if (isset($_POST['pref_lang']))

   {
     $_SESSION['pref_lang']) = $_POST['pref_lang']) ;  // HERE you define the session variable
   }

然后你可以在你的代码中使用$_SESSION['pref_lang'])

  • post/get 提交后的会话存储数据,因此您可以从 post/get 变量定义会话

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    相关资源
    最近更新 更多