現在、データベースとのPHPセッションを使用した認証を使用して、モバイルサイトで作業しています。送信時にserver_login.phpに進む形式のログインページがあります。 phpファイルはいくつかのセッションデータ($ _SESSIONに保存)を作成し、ユーザーをインデックスページにリダイレクトします。
header("location:../../index.php");
新しいWebページ(index.php)は正しく読み込まれます。ただし、ヘッダーがページをリダイレクトしても、アドレスバーのURLは変更されません。それはhttp://localhost/index.phpの代わりに* http://localhost/php/server/server_login.php*のままであり、したがってすべてです。相対パスを利用する私の他のリソースをロードできませんでした。 Webページはまだ/ではなく/ php/serverにあると考えています。
不思議なことに、私の他のlogout.phpでのヘッダー( "location:...")の使用はうまくいき、URLを変更することでページを正常にリダイレクトします。
私はヘッダリダイレクトの前に私の* server_login.php *に出力がないことを確認しました(上でそれは単にチェックするmysql呼び出しです)そして私もob_start()とob_end_flush()を使いました。
アドレスバーのURLを強制的に変更する方法はありますか(したがって、相対パスの問題を解決することをお勧めします)。それとも私は何か悪いことをしていますか?
P/S:私はjQuery Mobileを使っています。
編集:これは、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");
}
変更してみてください。
header("Location : blabla")
^
|
(whitespace)
に
header("Location: blabla")
サーバーが正しいリダイレクトヘッダーを送信すると、ブラウザはリダイレクトして「URLを変更」します。ブラウザの問題かもしれません。関係ないかどうかはわかりませんが、ロケーションヘッダーに相対URLを送信しないでください( "HTTP/1.1では"Locationの引数として絶対URIが必要です。スキーム、ホスト名、絶対パスを含みます。しかし、一部のクライアントは相対URIを受け入れます。 "、 http://php.net/manual/en/function.header.php )そして" location "は大文字にする必要があります。
header('Location: http://myhost.com/mypage.php');
フォーム要素にdata-ajax="false"
を追加します。私はjqueryモバイルを使用して同じ問題を抱えていた。
私はフォームを投稿するのと同じ問題を抱えていました。私がしたことは、data-ajaxをオフにすることでした。
あなたは休憩したいと思うかもしれません。あなたの場所の後:
header("HTTP/1.1 301 Moved Permanently");
header('Location: '. $YourArrayName["YourURL"] );
break;
空白を使用しないでください。私は同じ問題を抱えていました。それから私は以下のように空白を取り除きました:
header("location:index.php"); or header('location:index.php');
それからそれは働いた。
//ユーザーの名前と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");
への変更
//ユーザーの名前と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");
}
セッションデータが見つからない場合、リダイレクトしているページもリダイレクトされていませんか?それはあなたの問題かもしれません
また@Peter Oが提案するように常に空白を追加することもできます。
"cfphpflex"が示唆しているように、ヘッダを設定した後にbreak;
を追加することができます。 echo 'test';
のように何かをエコーすることもできます。
私はあなたのための解決策を得た、あなたのURLがのようなものであるならなぜあなたはむしろExplodeを使わないでください
URL-> website.com/test/blog.php
$StringExplo=explode("/",$_SERVER['REQUEST_URI']);
$HeadTo=$StringExplo[0]."/Index.php";
Header("Location: ".$HeadTo);
好みに合わせて家を変えるだけ
$home_url = 'http://' . $_SERVER['HTTP_Host'] . dirname($_SERVER['PHP_SELF']) . '/home';
header('Location: ' . $home_url);