【问题标题】:What is wrong with php configuration?php配置有什么问题?
【发布时间】:2018-07-09 16:21:51
【问题描述】:

这是带有会话的简单 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”,那么一切都会起作用。

更新: 错误是“未定义的变量:_SESSION”行 var_dump($_SESSION['test']);

更新: 如果你写这段代码:

<?php

session_start();

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

一切都会正常工作。

【问题讨论】:

  • 我知道这是一个变量作用域,但是“$_SESSION”数组默认是超全局的。这就是为什么它应该在没有全局关键字的情况下在任何地方都可用。
  • 当然,默认情况下单独使用而不是在您没有将参数传递给的方法中使用
  • 你也在header之前输出。
  • 你在哪一行得到错误

标签: php session php-ini


【解决方案1】:

始终将您的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();。因此,一个安全的选择是将它放在页面的开头,紧跟在开头的&lt;?php 标记之后,然后再放在其他任何地方。还要确保在打开的&lt;?php 标记之前没有空格/制表符。
  2. header 重定向之后,使用exit(); 结束当前脚本(其他人也建议使用session_write_close();session_regenerate_id(true),您也可以尝试这些,但我会使用exit();)。李>
  3. 确保在您用于测试的浏览器中启用了 cookie。
  4. 确保register_globals 处于关闭状态,您可以在php.ini 文件上检查这一点,也可以使用phpinfo()。关闭方法请参考this
  5. 确保您没有删除或清空会话。
  6. 确保$_SESSION 超全局数组中的键没有被覆盖。
  7. 确保重定向到同一个域。因此,从 www.yourdomain.com 重定向到 yourdomain.com 不会继续会话。
  8. 确保您的文件扩展名是 .php(它发生了!)。

Session variables not working php

【讨论】:

    猜你喜欢
    • 2017-03-08
    • 2014-01-13
    • 2014-04-11
    • 2011-09-11
    • 2013-07-17
    • 2016-02-11
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多