如果php $_SESSION 变量有数据

If php $_SESSION variable has data

我是 php 的新手。我正在尝试检查会话变量是否有值?如果是,则不执行任何其他设置值。这是我的代码:

if (isset($_POST['ProductName'])) {
    if (!empty($_SESSION['UserBasketID'])) {
        $order = $_POST['ProductName'];
        $date = date("Ymd");
        $_SESSION['UserBasketID'] = $date.$order;
        var_dump($_SESSION['UserBasketID']);            
    } else {
        echo 'The session is set';
        if (isset($_SESSION['UserBasketID'])) {
            var_dump($_SESSION['UserBasketID']);
        }
    }
}

谁能告诉我它在 php 中是如何工作的。

你的 if 条件倒转了。

empty() returns 如果变量未设置或包含空值则为真。
!empty()(前面有 !)returns 如果变量 已设置 且不包含空值,则为真。

所以代码:

if (!empty($_SESSION['UserBasketID']))

如果会话已定义且具有非空值,则计算结果为 true,这意味着您当前仅在会话已设置的情况下设置会话。

去掉empty()前面的!,应该可以了:

if (isset($_POST['ProductName'])) {
    if (empty($_SESSION['UserBasketID'])) {
        $order = $_POST['ProductName'];
        $date  = date("Ymd");
        $_SESSION['UserBasketID'] = $date . $order;
        var_dump($_SESSION['UserBasketID']);            
    } else {
        echo 'The session is set';

        // We can remove the if-statement here since we
        // we've already checked it
        var_dump($_SESSION['UserBasketID']);
    }
}

php documentation 指出自 7.1.0 以来:

session_start() now returns FALSE and no longer initializes $_SESSION when it failed to start the session.

因此,现在检查会话 属性 是否已设置的正确方法是:


if (session_start() && isset($_SESSION['UserBasketID'])) {
   // $_SESSION['UserBasketID'] is set
} else {
   // Either no session, $_SESSION not initialized or $_SESSION['UserBasketID'] not set
}