Cabeçalho do PHP (localização:...): forçar a alteração do URL na barra de endereços

estou a trabalhar num site móvel com autenticação usando sessões de PHP com uma base de dados. Eu tenho uma página de login com um formulário que vai para server_login.php ao submeter. O ficheiro php cria então alguns dados de sessão (guardar em $_SESSION), e redirecciona o utilizador de volta para a página de índice:

header("location:../../index.php");

a nova página web (índice.php) carrega correctamente; contudo, quando o cabeçalho redirecciona a página, o URL na barra de endereços não é alterado; permanece em *http://localhost/php/server/server_login.php * em vez de http://localhost/index.php e, portanto, todos os meus outros recursos que fazem uso da localização relativa não puderam ser carregados. É como se a página web ainda pensa que reside em /php/server em vez de /.

estranhamente, o meu outro uso do cabeçalho ("localização: ...") no logout.o php funciona e redireciona a página com sucesso com uma mudança de URL.

certifiquei-me de que não há saídas na minha *server_login.php * antes do cabeçalho redireccionar (acima são apenas chamadas mysql para verificar) e eu usei ob_start () e ob_end_flush () também.

Existem alguns métodos de forçar a URL na barra de endereços a mudar (e assim espero corrigir o problema do caminho relativo)? Ou estou a fazer algo de errado?

P/S: estou a usar o telemóvel jQuery.

editar: aqui está o meu código para o redireccionamento que não altera o URL:

// some other stuff not shown


$sql = "SELECT * FROM $user_table WHERE email = '$myemail' AND password = '$mypassword'";
$login_result = mysql_query($sql, $connection);

$count = mysql_num_rows($login_result);

if ($count == 1) {

    // Successfully verified login information

    session_start();

    if (!isset($_SESSION['is_logged_in'])) {
        $_SESSION['is_logged_in'] = 1;
    }

    if (!isset($_SESSION['email'])) {
        $_SESSION['email'] = $myemail;
    }
    if (!isset($_SESSION['password'])) {
        $_SESSION['password'] = $mypassword;
    }

    // Register user's name and ID
    if ((!isset($_SESSION['name'])) && (!isset($_SESSION['user_id'])))  {
        $row = mysql_fetch_assoc($login_result);
        $_SESSION['name'] = $row['name'];
        $_SESSION['user_id'] = $row['user_id'];
    }

    header("Location: http://localhost:8080/meet2eat/index.php");

} else {
    // Not logged in. Redirect back to login page
    header("Location: http://localhost:8080/meet2eat/php/login.php?err=1");

}
Author: vemoxy, 2011-09-19

14 answers

Tenta mudar:

header("Location : blabla")
                ^
                |
           (whitespace)

A

header("Location: blabla")
 58
Author: BuraCULa, 2012-10-28 19:03:46

Bem, se o servidor enviar um cabeçalho de redirecionamento correto, o navegador redireciona e, portanto, "muda a url". Pode ser um problema de navegador, então. Não sei se tem alguma coisa a ver com isso, mas você não deve enviar um url relativo no cabeçalho da localização ("HTTP/1.1 requer um URI absoluto como argumento para" localização: incluindo o esquema, o nome da máquina e o caminho absoluto, mas alguns clientes aceitam URIs relativos. ", http://php.net/manual/en/function.header.php ), e" localização " deve ser capitalizado, como:

header('Location: http://myhost.com/mypage.php');
 28
Author: schneck, 2013-07-11 06:41:39

Na sua forma, adicione data-ajax="false". Eu tive o mesmo problema usando jQuery mobile.

 17
Author: kackleyjm, 2016-01-12 05:20:08
Tive o mesmo problema em Publicar um formulário. O que eu fiz foi desligar o data-ajax.

 6
Author: Hadi, 2012-02-26 02:05:49

Não utilize nenhum espaço em branco. Eu tinha o mesmo problema. Depois removi o espaço branco como:

header(location:index.php);
Então funcionou.
 5
Author: Hasib Omi, 2014-02-28 19:07:29

Você pode querer fazer uma pausa; depois da sua localização:

header("HTTP/1.1 301 Moved Permanently");
header('Location:  '.  $YourArrayName["YourURL"]  );
break;
 3
Author: cfphpflex, 2015-12-03 19:45:37

Tem a certeza que a página que está a redireccionar também não tem uma redirecção dentro dela se não forem encontrados dados de sessão? Esse pode ser o teu problema.

Também sim adiciona sempre espaços em branco como o @Peter O sugeriu.

 1
Author: Joe Barbour, 2014-06-21 09:35:42

/ / Register user's name and ID

if ((!isset($_SESSION['name'])) && (!isset($_SESSION['user_id'])))  {
    $row = mysql_fetch_assoc($login_result);
    $_SESSION['name'] = $row['name'];
    $_SESSION['user_id'] = $row['user_id'];
}

header("Location: http://localhost:8080/meet2eat/index.php");

Alteração para

/ / Register user's name and ID

if ((!isset($_SESSION['name'])) && (!isset($_SESSION['user_id'])))  {
    $row = mysql_fetch_assoc($login_result);
    $_SESSION['name'] = $row['name'];
    $_SESSION['user_id'] = $row['user_id'];
header("Location: http://localhost:8080/meet2eat/index.php");
}
 1
Author: GULIM SHAH, 2015-10-23 09:06:04

Tenho uma solução para ti, porque é que não preferes usar o Explode se a tua url for algo como

Url - > website.com/test/blog.php

$StringExplo=explode("/",$_SERVER['REQUEST_URI']);
$HeadTo=$StringExplo[0]."/Index.php";
Header("Location: ".$HeadTo);
 0
Author: Jomar Delfin, 2014-08-02 03:36:16
Muda de casa para o teu gosto.
$home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/home';

header('Location: ' . $home_url);
 0
Author: aary trivedi, 2015-04-26 03:49:39

Como o" cfphpflex " sugeriu, pode adicionar break; depois de definir o cabeçalho. Você também pode ecoar algo, como echo 'test';.

 0
Author: shlgug, 2016-08-15 18:33:54

É suposto usá - lo como header(Location:../index.php) se estiver noutra pasta

 -3
Author: faoud, 2013-10-23 19:59:36

Utilizar

Cabeçalho ("localização: índice.php"); / / este trabalho no meu site

Leia mais no cabeçalho () na documentação do php.

 -3
Author: Alex, 2014-12-01 11:24:09

Porquê toda esta url de localização?

http://localhost:8080/meet2eat/index.php

Pode apenas usar

index.php

Se os ficheiros php estão na mesma pasta e isto é melhor porque se quiser apresentar os ficheiros ou alterar o porto você não terá nenhum problema em alcançar este URL.

 -7
Author: Hamza Trabelsi, 2013-08-17 14:58:36