簡體   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