简体   繁体   English

在不同环境中的PHP会话变量将无法正常工作

[英]php session variable in a different environment won't work

The following script works under windows xampp, php 5.3.8 以下脚本在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;

but on ubuntu server, php 5.3.10 if I var_dump($myvar) the value is null 但Ubuntu的服务器,PHP 5.3.10,如果我var_dump($myvar)的值是null

Have you considered you may be defining your session variable twice, overwriting the first defined within your if statement? 您是否考虑过可能会两次定义会话变量,从而覆盖if语句中定义的第一个变量? Also if you were to run the following code while !empty($_GET['myvar']) is true: 同样,如果您在!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;

You would most likley get an undefined variable warning because your not setting $myvar. 因为您未设置$ myvar,所以大多数likley会收到未定义的变量警告。 Try this: 尝试这个:

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

You only add value to $myvar if the session or the get parameter is empty. 仅当会话或get参数为空时,才向$myvar添加值。 Otherwise it is null. 否则为null。 How about this: 这个怎么样:

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;

Or simply: 或者简单地:

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

It's false for all time. 一直都是假的。 Becase on fist time $_SESSION['myvar'] is empty, and $_GET['myvar'] not empty: 首先,$ _ 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