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