php配置有什么问题?

时间:2018-01-30 17:27:16

标签: php session php-ini

这是带有会话的简单php代码:

<?php

session_start();

function testSession() {
    //global $_SESSION;
    var_dump($_SESSION['test']);
}

if (!isset($_SESSION['test'])) {
    echo  " Nope";
    $_SESSION['test'] = " Yeap";
} else {
    testSession();
}
?>

问题是“$ _SESSION”不是超全球。 “$ _SESSION”在testSession函数范围中未定义,仅在主范围内可见。如果我取消注释“global $ _SESSION”,那么一切都会起作用。

UPD: 错误是“var_dump”行中的“未定义变量:_SESSION”($ _ SESSION ['test']);

UPD: 如果你写这段代码:

<?php

session_start();

if (!isset($_SESSION['test'])) {
    echo  " Nope";
    $_SESSION['test'] = " Yeap";
} else {
    var_dump($_SESSION['test']);
}
?>

一切都会正常工作。

1 个答案:

答案 0 :(得分:0)

始终将session_start();放在页面的开头。

尝试使用:

<?php
session_start();
echo "Session test ";



function testSession() {
    //global $_SESSION;
    var_dump($_SESSION['test']);
}

if (!isset($_SESSION['test'])) {
    echo  " Nope";
    $_SESSION['test'] = " Yeap";
} else {
    testSession();
}

?>
  
      
  1. 确保在调用任何会话之前调用session_start();。因此,安全的赌注是将其放在页面的开头,紧接在开始<?php标记之后。还要确保在打开<?php标记之前没有空格/制表符。
  2.   
  3. header重定向后,使用exit();结束当前脚本(其他人也建议session_write_close();session_regenerate_id(true),您也可以尝试这些,但我会使用exit();)。
  4.   
  5. 确保在您用于测试的浏览器中启用了Cookie。
  6.   
  7. 确保register_globals已关闭,您可以在php.ini文件上以及使用phpinfo()进行检查。有关如何将其关闭的信息,请参阅this
  8.   
  9. 确保您没有删除或清空会话。
  10.   
  11. 确保$_SESSION超全局数组中的密钥不会被覆盖。
  12.   
  13. 确保您重定向到同一个域。因此,从www.yourdomain.com重定向到yourdomain.com不会使会话向前发送。
  14.   
  15. 确保您的文件扩展名为.php(它会发生!)。
  16.   

Session variables not working php