不同环境中的 PHP 会话变量将不起作用


php session variable in a different environment won't work

以下脚本在Windows xampp,php 5.3.8下工作

session_start();
    if (empty($_SESSION['myvar']) && empty($_GET['myvar'])) {
        $myvar = "some_value";
    } elseif (!empty($_GET['myvar'])) {
        $_SESSION['myvar'] = $_GET['myvar'];
    }
    $_SESSION['myvar'] = $myvar;

但是在 ubuntu 服务器上,如果我var_dump($myvar) php 5.3.10 的值是null

您是否考虑过您可能要定义会话变量两次,覆盖if语句中定义的第一个变量? 此外,如果您要在 !empty($_GET['myvar']( 为 true 时运行以下代码:

session_start();
if (empty($_SESSION['myvar']) && empty($_GET['myvar'])) {
    $myvar = "some_value";
} elseif (!empty($_GET['myvar'])) {
    $_SESSION['myvar'] = $_GET['myvar'];
}
$_SESSION['myvar'] = $myvar;

最容易收到未定义的变量警告,因为您没有设置$myvar。 试试这个:

session_start();
if (empty($_SESSION['myvar']) && empty($_GET['myvar'])) {
    $myvar = "some_value";
    $_SESSION['myvar'] = $myvar;
} elseif (!empty($_GET['myvar'])) {
    $_SESSION['myvar'] = $_GET['myvar'];
}
empty($_SESSION['myvar']) && empty($_GET['myvar'])

这在任何时候都是错误的。在第一个时间 $_SESSION['myvar'] 为空,$_GET['myvar'] 不为空:

$_SESSION['myvar'] = $myvar; // now $myvar is empty

 if (empty($_SESSION['myvar']) && empty($_GET['myvar'])) {
        $_SESSION['myvar'] = "some_value";
    } elseif (!empty($_GET['myvar'])) {
        $_SESSION['myvar'] = $_GET['myvar'];
    }

仅当会话或 get 参数为空时,才向$myvar添加值。否则为空。这个怎么样:

session_start();
$my_var = isset($_SESSION['my_var'] ? $_SESSION['my_var'] : 'default_value';
if(empty($_SESSION['myvar']) && empty($_GET['myvar'])){
    $myvar = 'some_value';
} elseif(!empty($_GET['my_var'))) {
    $myvar = $_GET['myvar'];
}
$_SESSION['my_var'] = $myvar;

或者简单地说:

session_start();
$_SESSION['my_var'] = isset($_GET['my_var']) ? $_GET['my_var'] : (isset($_SESSION['my_var']) ? $_SESSION['my_var'] : 'default_value');