phpで会員制サイトの制作を勉強しています。
データベースへはPDOで接続しています。
MySQLデータベースを使用しています。
セッション変数($_SESSION["email"])の有無を使用したログイン方法を使用しています。
セッション変数の破棄(ログアウト処理)について質問があります。
前提として、現在会員制サイト制作の勉強で「ログアウト後は必ずTOPページに遷移する」という形にこだわっています。
ちなみに現在使っているログアウトの方法は
1、
全ページ共通の、ページ上部に表示されるメインメニューに
<form method="post" name="logout" action="toppage.php">
<input type="hidden" name="logout" value="true">
<input type="submit" value="ログアウト">
</form>
でログアウトボタンを作成し、
ログアウトボタンが押されたらtrueという値を持った$_POST["logout"]を
トップページ(toppage.php)に送る。
2、トップページ(toppage.php)に画面遷移させ、
$logout = filter_input(INPUT_POST, 'logout');
if($logout=="true"){
unset( $_SESSION["email"] );
}
でもしも$_POST["logout"]がtrueなら
セッション変数$_SESSION["email"]を破棄する
というプログラムによりログイン・ログアウトを管理しています。
きちんと動いてはいるのですが、不満が1つあります。
願わくばログアウトボタンをformタグのsubmitで作るのではなく、
<a href="toppage.php">ログアウト</a>
とリンクを使用して作成したいです。
このようにリンクを使用する場合、遷移後のTOPページ(toppage.php)でセッション変数$_SESSION["email"]を破棄するには、どのようなプログラムを記述すれば良いのでしょうか?
ネットで調べたりもしましたが、ほとんどのサイトで紹介していたものは、
ログアウトリンクをクリックすると、ログアウト処理確認専用の画面(「ログアウトしました!」とだけ書かれたような画面)に遷移し、セッション変数を破棄するものばかりでした・・・
私個人としてはログアウト処理が完了した旨を報告する画面をワンクッション置くのは、あまり実用的ではない気がして好みません・・・
巷にあふれているようなサイトではログアウトボタンをクリックすると
TOPページに遷移するようなサイトばかりなので、
phpを使用した場合、どうやったらそのような仕組みになるのか考えた上で、
今のへんてこなログアウト処理プログラムに至りました。
ごちゃごちゃしていないもっと良いログアウト処理プログラムはないでしょうか?
ご回答、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
anchor要素だと(QueryStringで渡すにしてもpathinfoで渡すにしても)間違ってログアウト後のTOPページをBookmarkされてしまうと、そのBookmarkでTOPに戻ろうとするとログアウトしてしまうけどそれはいいんですかね。
anchor要素でやるならlogout.phpのようなログアウト専用のスクリプトにリンクして、そちらでセッション情報を破棄してからLocationヘッダでtoppageへ遷移させる方が素直だと思います。
logput.php
<?php
session_start();
if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); }
$_SESSION = array();
session_destroy();
header('Location: http://example.com/toppage.php');
ご回答ありがとうございます!
ブックマークされた場合とか、全く考えていなかったです・・・
確かに動作的に危ないですね。
仰るとおり、headerで飛ばせば、ワンクッションページがあっても
ログアウト処理が安全に行えて、無駄な画面は表示されないので良いですね!
非常に為になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セッションのクッキー有効期間...
-
PHP session_destroyとsession...
-
CFileDialogの最初のディレクト...
-
GDへ値を渡す方法は?
-
onedrive にexcelファイルをア...
-
データ送信をボタンを押さずに...
-
10MB以内のJPG画像
-
PHPパーミッションについて
-
youtubeに音声のみのmp4ファイ...
-
.phpファイルが、表示されない
-
画像リストを作りたい
-
phpのPDOの導入
-
PHPから別なPHPへ移動(?)する方法
-
PHPでメールを受信するには?
-
SEO 動的・静的ページの説明に...
-
【PHP】フレームワークを習得す...
-
違法アップロードについて
-
ssiをhtmlで動作させる為、htac...
-
PHPでSMTPを使ってメール送信で...
-
phpスクリプトのみで定期実行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHP session_destroyとsession...
-
$_SESSION 有効期限をブラウザ...
-
セッションのクッキー有効期間...
-
リロード・ページビューの判定
-
セッションファイルの場所
-
session_set_save_handler の実...
-
セッション部分のインクルード
-
SESSIONを階層ごとに分けるには?
-
phpのセッションについて
-
phpソース間で値を保持しておけ...
-
PHPからリアルタイムにデータを...
-
jqueryの$.ajaxでPHPに値を渡し...
-
レンタルサーバーのセッション...
-
IE11でページ遷移時にセッショ...
-
SESSION受け渡し
-
「セッション管理用のクッキー...
-
スーパーグローバル変数である$...
-
sessionの扱いがこれで合ってい...
-
さくらサーバーでsessionが使え...
-
phpとjavaのセッション
おすすめ情報