- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试拥有一个安全的登录页面,在使用 XAMPP 时工作正常,但现在我已经切换到 Docker,我收到此错误:
Warning: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time in /var/www/inc/cUser.php on line 30
我不确定,如果我需要对容器本身做一些设置,到目前为止我还没有找到解决方案
我从表单中获取 $_POST 数据并将其传递到我的 process.php:
require_once(dirname($_SERVER['DOCUMENT_ROOT']) . '/inc/autoloader.php');
$user = new cUser();
$user -> sec_session_start();
cUser.php:
protected function sec_session() {
define("SECURE", true);
$session_name = 'sec_session_id';
$secure = SECURE;
$httponly = true;
if (ini_set('session.use_only_cookies', 1) === FALSE) {
//header("Location: /error.php?err=Could not initiate a safe session (ini_set)");
// here i got the same error twice, so i commented it out and used the code below
echo("<script>location.href = /error.php?err=Could not initiate a safe session (ini_set);</script>");
exit();
}
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"],
$cookieParams["path"],
$cookieParams["domain"],
$secure,
$httponly);
session_name($session_name);
session_start();
session_regenerate_id();
}
以上工作正常,我回到我的 process.php:
if ($login) {
// Login successful
exit(header('Location: /index.php'));
} else {
// Login not successful
exit(header('Location: /error.php?error=1'));
}
我成功重定向到 index.php。在我的 index.php 中,我再次调用相同的方法,以确保我拥有正确的用户并有权查看该页面:
require_once(dirname($_SERVER['DOCUMENT_ROOT']) . '/inc/autoloader.php');
$user = new cUser();
$user -> sec_session_start();
现在我无意中发现了这个错误。这是一行:
if (ini_set('session.use_only_cookies', 1) === FALSE) {
我不确定这里有什么问题,有人可以帮我吗?
最佳答案
我认为了解是什么是导致 Headers already sent
的关键错误,以便查明你的错误是什么。
当有人请求网页时,发送任何形式的 HTML 之前页面的第一位是一组 header 。这些键值对包含有关页面的关键信息,例如状态代码(200 表示成功,404 表示未找到等)。
它还包含 cookie 信息,这是 PHP session 如何工作的关键(我想您可能知道您正在执行的命令)。
由于 header 是在请求开始时发送的,如果您将 任何 输出放到与 header 无关的页面(即使是 <?php
标签之外的换行符),这将阻止发送任何其他 header 并抛出您看到的错误。
鉴于您所看到的症状(这以前有效,但在 Docker 中无效),最可能的原因是在错误报告方面存在配置差异(Docker 容器中的错误报告设置为高于 XAMPP 中的版本)或 PHP 版本(可能在 Docker 容器中使用比 XAMPP 中更新的 PHP 版本)。
您发布的所有代码看起来都不应该出错,所以我假设这个潜在错误发生在您的 autoloader.php
中。文件。
关于PHP7.2.7-fpm/Docker ini_set() : Headers already sent. 此时无法更改session模块的ini设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57762806/
这是我告诉 php 要做的: 希望我能在一个文件中报告所有错误,在消息前加上“PRE”,在消息后加上“APP”。 (我的目标是把PRE和APP做成/n/r什么的。。。) 但是我的报错日志是这样的:
我想关闭输出缓冲。目前它显示 no value 本地和主。我运行 ini_set('output_buffering',4092); 并且 phpinfo() 没有任何变化。安全模式已关闭。 接下来要
当我们在代码中像下面这样使用 ini_set 时,所有其他代码的内存限制是否相同?或者只对我们添加的代码有效? ini_set('memory_limit', '512M'); 谢谢 最佳答案 它只对
我试图用 ini_set 关闭 expose_php,但它似乎不起作用。我尝试了值 0 和 Off,但都不起作用。 ini_set('expose_php',0); 帮助? 最佳答案 http://p
事情是这样的: ini_set('display_errors', '1');ini_set('safe_mode', '0');ini_set('allow_url_fopen', '1');ini
我有 index.php 和几个级联包含的文件,类似这样。 index.php -> controller.php -> model.php -> view.php 在 model.php 我有一个函
我将以“display_errors”为例: ini_set('display_errors', 1);// int ini_set('display_errors', '1');// string
我想知道放置 ini_set() 函数的最佳位置,因为我认为当 ini_set 函数在这样的方法中时: private function archiveBackup() { ini_set('
我正在进行代码审查,发现有 2 个地方 ini_set('memory_limit', '512M'); 在函数中使用。这个可以吗?不知何故,这对我来说似乎不对。这被认为是不好的做法吗? 谢谢! 最佳
在我当前的项目中,我有一个 security.php,其中包含一些函数和一些 ini_set() 语句。 ini_set('session.use_trans_sid', 0); ini_set('s
我如何检查服务器配置是否允许我设置如下选项: ini_set('upload_max_filesize', '8M'); 在 PHP 脚本中?这是 php.ini directives 的列表但我真的
这个问题在这里已经有了答案: error_reporting(E_ALL) does not produce an error (7 个答案) 关闭 6 年前。 在 PHP 5.5.9 中 ini_
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: ini_set() scope of effect? 我在网站上工作,为了开发,我喜欢在浏览器中查看我的错误
我目前有一个将运行很长时间的脚本(尽管在它自己的单独进程中 fork )。它不会经常运行,但是当它运行时,它将使用大量内存,主要用于处理(许多)XLS 文件(> 10 MB)。 当此脚本以 6000
我正在使用 ini_set() php 函数来减少最大执行时间。我对此没有任何问题,但我想知道这个功能是什么,如何真正发挥作用。我认为它可能会覆盖 php.ini 文件,因此我在 php.ini 文件
我正在尝试上传更大的文件,所以我在 php 代码中设置了它 ini_set('upload_max_filesize', '1000M'); ini_set('post_max_size',
如果我在 PHP 页面中使用 ini_set('default_socket_timeout',30);,这是否会影响在 所有 上进行的套接字调用服务器还是仅此页面当前生命周期中的服务器? 干杯! 最
我正在使用 ini_set() php 函数来减少最大执行时间。我对此没有任何问题,但我想知道这个功能是什么,如何真正发挥作用。我认为它可能会覆盖 php.ini 文件,因此我在 php.ini 文件
我正在尝试上传更大的文件,所以我在 php 代码中设置了它 ini_set('upload_max_filesize', '1000M'); ini_set('post_max_size',
如果我在 PHP 页面中使用 ini_set('default_socket_timeout',30);,这是否会影响在 所有 上进行的套接字调用服务器还是仅此页面当前生命周期中的服务器? 干杯! 最
我是一名优秀的程序员,十分优秀!