【问题标题】:PHP 5.6 SESSION handling (writing, reading)PHP 5.6 SESSION 处理(写、读)
【发布时间】:2015-11-16 00:48:21
【问题描述】:

我在执行网站上收到此通知:

Notice: Undefined variable: _SESSION in *PATH* on line 25这行代码$_SESSION["Registration_Error"] = TRUE;为什么是未知的$_SESSION-Variable?

他们是否改变了在 Session-Variable/Cookie 中保存数据的方式?

在 Google 上找不到好东西。只是这个http://php.net/manual/de/book.session.php#116217,我认为这没有多大帮助。

想法?

编辑:

完整代码

<?php

session_start();

function __autoload($class_name) {
    include "../backend/classes/$class_name.php";
}

$Connection = new DB_Connect();
$User_Functions = new User_Functions();

$UserName = filter_input(INPUT_POST, "UserName");
$Password = filter_input(INPUT_POST, "Password");
$Mail = filter_input(INPUT_POST, "Mail");
$date = new DateTime();
$Registration_Date = $date->format("Y-m-d H:i:s");

if (!empty($UserName) && !empty($Password) && !empty($Mail)) {
    if (!$User_Functions->User_Exists($UserName)) {
        $Password_hashed = password_hash($Password, PASSWORD_DEFAULT);

        $Query = "INSERT INTO wordsusers (`wordsUserName`, `wordsUserPassword`, `wordsUserMail`, `wordsUserRegDate`) VALUES (:wordsUserName, :wordsUserPassword, :wordsUserMail, :wordsUserRegDate)";
        $Parameter = array(":wordsUserName" => $UserName, ":wordsUserPassword" => $Password_hashed, ":wordsUserMail" => $Mail, ":wordsUserRegDate" => $Registration_Date);
        $Registered = $Connection->Execute_PDO_Command($Query, $Parameter);
    } else {
        $_SESSION["Registration_Error"] = TRUE;
        header("Location: ../index.php");
    }
}

【问题讨论】:

  • 你在脚本开头是否调用了session_start()
  • 是的,在第一行;)
  • 如果没有多年的警告,他们不可能做出如此剧烈、不兼容的改变。您的脚本中一定有错字或其他内容。
  • 您收到Headers already sent 警告了吗?
  • 使用十六进制编辑器检查您的脚本,确保其中没有多余的、不可见的字符。

标签: php session php-5.6


【解决方案1】:

允许所有用户读取和写入目录。修复所有权和权限,以便 www-data 可以读写(rwx)。例如:

chgrp www-data /var/lib/php5/sessions

chmod g+rwx /var/lib/php5/sessions

【讨论】:

    【解决方案2】:

    $_SESSION 的基本特性和用途在 PHP 版本 4 中弃用 $HTTP_SESSION_VARS 后并没有在各个 PHP 版本中发生变化,它仍然得到适当的维护,跨页面和超级全局变量保持不变。 然而,它在较低版本的 PHP 中更容错,从 5.4 向下比从 5.5 向上(包括 5.6)。

    一般规则,在调用 session_start() 函数之前不要输出任何内容,该函数会启动会话变量的创建或重新启动现有会话变量。

    但是,较低版本的 PHP 可以容忍 session_start() 语句之前的黑色间隙,您的脚本仍然可以正常运行,但较高版本不允许这样做。 所以要回答你的问题,请确保你的脚本总是这样开始。

    在任何其他代码之前,使用@ 来禁止任何警告,将您在链接到当前脚本的脚本上启动它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多