动态命名session isset怎么用?

dynamically name session isset how to use?

我试图在下面显示的第二页上获得动态 $_SESSION[$id],但它不起作用(根据打印输出):

首页url

https://example.com/test.php?id=1548393

首页代码

<?php 
session_start();

$id = $_GET['id'];
$_SESSION[$id] = "mysecretstringline";

?>

第二页url

https://example.com/test2.php?id=1548393

第二页代码

<?php 
session_start();
$id = $_GET['id'];

if(isset($_SESSION[$id])){
 echo "working";
}else{
 echo "not working";
}
?>

可能是在您的正常代码中(这看起来只是一个快速模型),您在 ?> 某处之后有一个 space。这可能会导致问题。

<?php
// start.php
session_start();
$id = $_GET['id'];
$_SESSION[$id] = "mysecretstringline";

<?php
// next.php
session_start();
$id = $_GET['id'];
if (isset($_SESSION[$id])) {
    echo "working";
} else {
    echo "not working";
}

适合我。注意没有 ?> 个字符。

更新

以下关于会话名称约束的内容可能会引起您的兴趣 (can a php $_SESSION variable have numeric id thus : $_SESSION['1234’])

你的例子中有这个问题,你可以添加一个 id_ 然后在 validating/getting 会话时做同样的检查。

我发现了我们不能为 $_SESSION 使用数字索引的问题

但我们可以通过将数字转换为罗马数字在 $_SESSION 中使用数字

第一页url

https://example.com/test.php?id=1548393

首页代码

<?php 
session_start();

$roman_id = romanic_number($_GET['id']);
$_SESSION[$roman_id] = "mysecretstringline";


        function romanic_number($integer, $upcase = true) 
        { 
            $table = array('M'=>1000, 'CM'=>900, 'D'=>500, 'CD'=>400, 'C'=>100, 'XC'=>90, 'L'=>50, 'XL'=>40, 'X'=>10, 'IX'=>9, 'V'=>5, 'IV'=>4, 'I'=>1); 
            $return = ''; 
            while($integer > 0) 
            { 
                foreach($table as $rom=>$arb) 
                { 
                    if($integer >= $arb) 
                    { 
                        $integer -= $arb; 
                        $return .= $rom; 
                        break; 
                    } 
                } 
            } 

            return $return; 
        } 

?>

第二页url

https://example.com/test2.php?id=1548393

第二页代码

<?php 
session_start();

$roman_id = romanic_number($_GET['id']);

if(isset($_SESSION[$roman_id])){
 echo "working";
}else{
 echo "not working";
}


            function romanic_number($integer, $upcase = true) 
            { 
                $table = array('M'=>1000, 'CM'=>900, 'D'=>500, 'CD'=>400, 'C'=>100, 'XC'=>90, 'L'=>50, 'XL'=>40, 'X'=>10, 'IX'=>9, 'V'=>5, 'IV'=>4, 'I'=>1); 
                $return = ''; 
                while($integer > 0) 
                { 
                    foreach($table as $rom=>$arb) 
                    { 
                        if($integer >= $arb) 
                        { 
                            $integer -= $arb; 
                            $return .= $rom; 
                            break; 
                        } 
                    } 
                } 

                return $return; 
            } 

    ?>

产出

working

感谢@gre_gor 和@Katie