【问题标题】:Why can't I access my session variables in PHP 7?为什么我不能在 PHP 7 中访问我的会话变量?
【发布时间】:2017-04-25 23:27:02
【问题描述】:

所以我正在尝试创建一个登录系统,并且我已经测试过 login.php 可以正确获取 POST 数据,我可以将其打印出来。但是我创建的内容应该发送回 index.php 并找到会话变量“密码”设置且不为空,但它总是再次打印登录页面。为什么我无法访问我的会话变量?

我的functions.php文件:

<?php

function sec_session_start() {
    $session_name = 'quassist_session';
    session_name($session_name);
    $secure = true;
    $httponly = true;
    if (ini_set('session.use_only_cookies', 1) === FALSE) {
        header("Location: ../error.php?err=Could not initiate a safe session (ini_set)");
        exit();
    }
    $cookieParams = session_get_cookie_params();
    session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly);
    session_start();
    session_regenerate_id(true);
}

function sec_session_logout() {
    $_SESSION = array();
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]);
    session_destroy();
}

?>

我的 login.php 文件:

<?php

include_once 'functions.php';

sec_session_start();
$_SESSION['username'] = $_POST['formuser'];
$_SESSION['password'] = $_POST['formpass'];
header("Location: index.php"); /* Redirect browser */
exit();

?>

我的 index.php 文件:

<?php
include_once("functions.php");
sec_session_start();

    echo "<html>";
    echo "<head>";
    echo "<title>Login</title>";
    echo "<link rel='stylesheet' href='style.css'>";
    echo "</head>";
    echo "<body>";

if(isset($_SESSION['password']) && !empty($_SESSION['password'])) {
    // user entered password
    echo $_SESSION['username'] . "<br>" . $_SESSION['password'];
    // logout
    // sec_session_logout();
} else {
    echo "<div class='login-page'>";
    echo "<div class='form'>";
    echo "<form class='login-form' action='http://www.quassist.com/login.php' method='post'/>";
    echo "<input name='formuser' type='text' placeholder='username'/>";
    echo "<input name='formpass' type='password' placeholder='password'/>";
    echo "<button type='submit' value='Submit'>login</button>";
    echo "</form>";
    echo "</div>";
    echo "</div>";
}

    echo "</body>";
    echo "</html>";
?>

【问题讨论】:

  • php.net/manual/en/function.error-reporting.php 如果您碰巧使用的是 mysql 数据库;确保你没有使用mysql_,因为 php 7 不再支持它。
  • 那是很多用于启动会话的“额外”代码
  • 啊,是的,安全 cookie 标志。如果您当前未使用 SSL,请将其删除。
  • 删除安全cookie标志,清除浏览器缓存然后重试。如果您正在设置安全 cookie 并且不使用 SSL,您的浏览器将不会使用 HTTP 将 cookie 发送到重定向。另外,如果您不想让人们评论它,请停止大喊大叫并省略愚蠢的代码。
  • 好吧,希望您下次请求免费帮助时不要居高临下:-)

标签: php html ubuntu login apache2


【解决方案1】:

$secure = true;

只有在您使用 TLS/HTTPS 时才能使用。否则它将阻止 cookie 工作。

【讨论】:

    【解决方案2】:

    你必须在php代码的第一行实现session_start函数。

    【讨论】:

      猜你喜欢
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多