【问题标题】:PHP Session is running but no value is set in $_SESSIONPHP 会话正在运行,但 $_SESSION 中未设置任何值
【发布时间】:2017-08-11 04:58:46
【问题描述】:

在我的一个 PHP 项目的登录表单中。经过所有验证后,我设置了$_SESSION['username'] = $username(其中$username 值来自该用户的db_username,当我编写echo $username; 时,它会打印正确的值)。

假设$username 是“管理员”所以$_SESSION['username'] = 'Admin'

成功登录后,页面会自动重新加载,问题就出现在这里。由于我已经登录,它必须显示 My Profile 菜单而不是 Login 菜单,但它显示的是 Login 菜单。所以我使用echo $_SESSION['username'] 打印空白值,而它应该打印“Admin”。

这在我的本地服务器(XAMPP,PHP 版本:7.0.9)中运行良好,但是当我在实时服务器(PHP 版本:5.6.30)中上传这些代码时会出现问题。

PHP 会话正在运行。当我使用以下代码进行检查时:

if( !session_start() ) {
    session_start();
} else {
    echo 'Session is started';
}

谁能帮我解决这个问题?提前致谢。

【问题讨论】:

标签: php session


【解决方案1】:

假设您运行的 PHP 版本高于 5.4,请像这样使用 session_status 函数:

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

session_status 根据会话状态返回以下值。

如果会话被禁用,则 PHP_SESSION_DISABLED。

PHP_SESSION_NONE 如果会话已启用,但不存在。

PHP_SESSION_ACTIVE 如果会话已启用且存在。

【讨论】:

  • 检查会话是否已经启动是否存在安全风险?我问是因为我从不检查。
  • @RajendranNadar No.
【解决方案2】:

这就是问题所在。

替换为

if( !session_start() ) {
    session_start();
} else {
    echo 'Session is started';
}`

这段代码

session_start();

无需检查会话是否已启动。如果您在同一页面中启动会话 2 次,PHP 将显示错误。所以不用检查是否启动了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多