首页 > 解决方案 > 如果 php $_SESSION 变量有数据

问题描述

我是 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 中是如何工作的吗?

标签: phpsessionsession-variables

解决方案


你的 if 条件是倒退的。

empty()如果变量 in 未设置或包含空值,则返回 true。如果变量已设置且不包含空值,则(前面
!empty()带有)返回 true。!

所以代码:

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

推荐阅读