动态命名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
我试图在下面显示的第二页上获得动态 $_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