[英]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.