私が解決できない/部分的にしか解決できない本当に厄介な問題。あなたのプロのための素敵なジューシーなもの。
基本的なログインシステムを設定しました。このような:
Login.php:
- ライン1:
session_start();
if($_SESSION['logged_in'] == true) header("Location: /controls.php);
すでに詳細を入力している場合は、確認してください。- まだ入力していない場合、有効な場合、ユーザーは資格情報を入力します。
$_SESSION['logged_in'] = true;
- データベースのクレデンシャルがチェックされ、セッションがtrueに設定されたら、PHPを使用してリダイレクトします
header("Location: /controls.php);
これでセッションが設定されたことを覚えておいてください。
Controls.php
- ライン1:
session_start();
- 2行目:
if($_SESSION['logged_in'] != true) {header("Location: /index.php");}
すぐに私はChromeとFirefoxでのみindex.phpに移動します。
また、私はaccounttools.php
、セッションが再び必要とされるところを持っています。アクセスしようとするaccounttools.php
と、セッションが破棄/設定解除され、ロードしようとするとaccounttools.php
、ヘッダーが/index.phpページにリダイレクトされます。これもFirefoxとChromeでのみです。
私も何かを追加する必要があります。に戻ってlogin.php
再ログインすると、すべてが正常に機能し、セッションが正しく設定されます。これはブラウザベースのバグですか?PHPはデータがブラウザに送信される前に実行されるので、何かがユーザーに届くまでにPHPがすでに実行されている場合、これらのブラウザは一体どのように異なる動作をすることができますか?
ログインファイル:
// Login.php
<?php session_start();
if($_SESSION['logged_in'] == true)
{
header("Location: /controls.php");
exit();
}
if($_POST['username_login'] && $_POST['password_login'])
{
// Do necessary database work to check credentials (edited out here).
// ...
// Check re-hashed pass against database hash (password checking)
if($make_password == $current_user[0]['password'])
{
// If this is OK login is a success.
$_SESSION['logged_in'] = true;
header("Location: /controls.php");
exit();
}
}
?>
コントロールファイル:
// controls.php
// This page instantly redirects to index.php
<?php session_start();
// Go to homepage if logging out.
if($_POST['logging_out'])
{
unset($_SESSION['logged_in']);
header("Location: /index.php");
exit();
}
// No access unless logged in.
// This session seems to no longer exist at this point. Why??
if($_SESSION['logged_in'] != true)
{
header("Location: /index.php");
exit();
}
?>
編集:私は何か他のものを発見しました:ログインして$_SESSION
-restrictedページのURLを手動で入力しても、$_SESSION
は破棄されません。
$_SESSION
GoogleとMozillaでthが設定解除/破棄される原因となるheader()リダイレクトの一部があります。
私も狂ったようにグーグルしてきました、そして明らかにこれはPHPコーダーの間で一般的な問題です。誰かがこれが何であるかについての手がかりを持っている必要がありますか?