次のコードに問題があります: http://pastebin.com/MCkhzQjs
これはローカルで (localhost で) 動作しますが、サーバーにアップロードするとログインしません。Cookieが送信されないことに関係していると思います。メタ リフレッシュは、Cookie が設定された後にページがリフレッシュされるようにするためのものです。助けてくれてありがとう。
次のコードに問題があります: http://pastebin.com/MCkhzQjs
これはローカルで (localhost で) 動作しますが、サーバーにアップロードするとログインしません。Cookieが送信されないことに関係していると思います。メタ リフレッシュは、Cookie が設定された後にページがリフレッシュされるようにするためのものです。助けてくれてありがとう。
答えは簡単です。
Cookie の設定、セッションの開始、ヘッダーの設定を行うことができるのは、PHP コード ブロックの外部にコンテンツがエコーされたり (html を含めて) 送信されたりしていない場合のみです。
例:
動作しません:
<div>
<?php setcookie(/*....*/); ?>
</div>
理由:<div>
が既に送信されているため、ヘッダーの送信が強制されているため、Cookie をヘッダーに追加できません。
別:
<?php
setcookie(/*....*/); //works
echo "test";
setcookie(/*....*/); //does not
?>
コードは次のようになります。
$title = "Admin panel";
if(!isset($_COOKIE['login'])) $_COOKIE['login'] = false;
if(!isset($_POST['password'])) $_POST['password'] = false;
if($_POST['password'] == "tt83df")
{
if(isset($_POST['permlog']))
{
$expire = time()+60*60*24*365;
setcookie("login", "tt83df", $expire, "/admin");
}
else
{
setcookie("login", "tt83df", 0, "/admin");
}
header("Location: " . $_SERVER['PHP_SELF']);
exit;//Stop here and SEND Headers
}
if($_COOKIE['login'] == "tt83df")
{
$html = '<ul><li><a href="news_panel.php">News control panel</a></li><li><a href="video_panel.php">Video control panel</a></li><li><a href="schedule_panel.php">Schedule control panel</a></li>
<li><a href="events_panel.php">Events control panel</a></li><li><a href="notices_panel.php">Notices control panel</a></li></ul>';
}else
{
$html = 'Password:<form method="post"><input type="password" name="password" /><input type="submit" value="Submit"><br />
<input type="checkbox" name="permlog" value="true" /> Stay logged in? (do not use on a public computer)</form>';
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="icon" type="image/vnd.microsoft.icon" href="images/favicon.ico" />
<title><?php echo $title; ?></title>
</head>
<body>
<?php echo $html; ?>
</body>
</html>
error_reporting を有効にしましたか? あなたのコードには、最初のphp-tagの前に空白が含まれており、これは出力であり、サーバーにヘッダーを強制的に送信させます(error_reportingはそれについて通知するはずです)。
問題は、出力ストリームに HTML を書き込んだ後に Cookie を設定することにあると思います。Cookie またはヘッダーの変更は、ヘッダーが送信される前にのみ行うことができます。出力ストリームにコンテンツを書き込むと、ヘッダーが自動的に書き込まれます。
ob_start();
コードの上部と下部で使用してみてくださいob_end_flush();
。これにより、出力ストリームに書き込まれるすべてのもので満たされるバッファが初期化されます。だから基本的に。ob_start
出力バッファを初期化し、ob_end_flush
バッファをクライアントに書き戻すためのものです。