Problema com o redirecionamento da pag de login

A página de login cumpre o que foi programada, rejeitar outras credenciais que não sejam as configuradas. Mas o problema é que quando coloco as credenciais definidas ela não me redireciona para a outra página. Como coloquei acima no código que seria para a “main.php”, para melhor observação anexei o link, caso alguém não possa acessar o link, anexei uma captura de tela.

<?php

session_start();

if (!empty($_POST)) {
$isim = $_POST[‘login’];
$sifre = $_POST[‘password’];

var_dump($isim, $sifre);

if($isim == 'teste' && password_verify($sifre, '$2y$10$OvT4fn4/S7cF2O4Rgr1hK.lhz0lKPaaEuyO/Bxn23HA7lFQEsCLoy')) {
	$_SESSION['auth'] = 1;
    
    header('Location: main.php');
    exit;
}

}

?>

Este é o link:
https://raindroipstexter.000webhostapp.com/panel/login.php
Username: teste
Password: teste

Captura:

O hash que você está usando para comparar a sifra pelo visto não é “teste”, melhor regerá-lo usando password_hash…

Mas eu testei

echo password_hash(‘teste’ , PASSWORD_DEFAULT);

Esse foi o resultado:

$2y$10$OvT4fn4/S7cF2O4Rgr1hK.lhz0lKPaaEuyO/Bxn23HA7lFQEsCLoy

E a execução:

var_dump(password_verify(‘teste’, ‘$2y$10$OvT4fn4/S7cF2O4Rgr1hK.lhz0lKPaaEuyO/Bxn23HA7lFQEsCLoy’));

Saída:

bool(true)

Pode ver a execução aqui:

https://3v4l.org/8tKMb

Tem razão, falei besteira foi mail!

Agora lembrei de um comportamento do php, quando se usa a função header não se pode imprimir nada antes de sua execução, apenas comente o var_dump antes do if e veja o resultado…

Isso porque a função manipula cabeçalho http, e quando encontra uma impressão ou html antes ele não irá executar…

Se quiser confirmar, deixe tudo como está e antes do session_start acrescente:

ini_set('display_errors', true);
error_reporting(E_ALL);
session_start();
...

Como vi que você está usando 000webhost, eles por padrão não mostram as mensagens de erro (recomendável em ambientes de produção), por isso não aparece nada para você, faça o teste e nos diga aqui!

Sobre a alteração que você falou, pode responder ao tópico com ela editada?

?php
ini_set(‘display_errors’, true);
error_reporting(E_ALL);
session_start();
if (!empty($_POST)) {
$isim = $_POST[‘login’];
$sifre = $_POST[‘password’];

var_dump($isim, $sifre);

if (var_dump($isim == ‘teste’ && password_verify($sifre, ‘$2y$10$OvT4fn4/S7cF2O4Rgr1hK.lhz0lKPaaEuyO/Bxn23HA7lFQEsCLoy’))) {
$_SESSION[‘auth’] = 1;

    exit(header("Location: panel/main.php"));
}

}

?

Não entendi o que quis dizer, quer exemplo de código é isso?

Antes de tudo, percebeu que você tem um erro na sessão? Precisa ver isso com o host de hospedagem o porque o php não tem acesso (por padrão no php, sessões são guardadas em arquivos temporários)

Agora voltando ao que eu tentei te explicar…

Antes do header não se pode imprimir nada, ex:

var_dump($isim, $sifre);
header('Location: main.php');

Ou qualquer outro comando de saída, echo, print, printf, print_r etc causa um erro ou comportamentos não esperados, pois o header manipula http como falei antes e assim como num documento html, você deve obedecer a regra:

cabeçalho
corpo

E um comando de saída “quebra” essa regra, fazendo o php imprimir html antes para o navegador…

O que eu pedi era apenas para você comentar a linha do var_dump justamente por isso, mas como você tem um erro de sessão precisa consertar primeiro…