繁体   English   中英

在不同环境中的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的服务器,PHP 5.3.10,如果我var_dump($myvar)的值是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,所以大多数likley会收到未定义的变量警告。 尝试这个:

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

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

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');
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'];
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM