問題がある。人々が私のサイトの1ページを更新できるようにしたくありません。どうすればいいですか?
3 に答える
更新はブラウザ側のソリューションです。サーバー側から制限することはできません。
実際にできることは、PHPのSESSIONを使用して、ユーザーが任意のページに2回アクセスするのを実際に防ぐことです。
<?php
session_start();
if(!isset($_SESSION['disablethispage'])){
$_SESSION['disablethispage'] = true;
// serving the page first time
}else{
// visited before or page was refreshed
}
ただし、ユーザーがWebサイトのセッションCookieを削除した場合でも、ユーザーは同じページに戻ることができます。
二重投稿について話している場合は、POST-REDIRECT-GETソリューションを検討することをお勧めします。参照: http: //en.wikipedia.org/wiki/Post/Redirect/Get
次のように、最後にそのページにアクセスした時間を保存してみてください。
<?php
session_start();
if(isset($_SESSION['last_visit']) && time() - $_SESSION['last_visit'] < 10) {
die('Wait ten seconds before you reload this page');
}else{
$_SESSION['last_visit'] = time();
}
?>
これにより、ページの読み込みが10秒に1回に制限されます。
この方法は、ユーザーがCookieを空にしないことに依存しているため、より厳密なソリューションが必要な場合は、IPアドレスを確認してデータベースに保存する必要がありますが、サーバーリソースがさらに必要になります。
できません。人々にページを更新させたくない理由を説明すれば、より良い解決策を説明できるかもしれません。
編集:
投稿フォームの更新を制限するための優れた解決策は、フォームを送信するときにブラウザをリダイレクトすることです。それはこのように動作します:
- フォームはpageA.phpにあり、pageB.phpに送信されます
- pageB.phpはheader( "Location:pageC.php");を実行します フォームデータを処理した後(302リダイレクト)
- pageC.phpには、ユーザーが実行したアクションの結果が表示されます。
その結果、ユーザーがpageC.phpを更新しても、フォームは再度送信されません。ユーザーが戻るボタンを押してからもう一度進むと、ブラウザーはpageC.phpをリロードするため、フォームも送信されません。