プロが教えるわが家の防犯対策術!

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を使用した場合、どうやったらそのような仕組みになるのか考えた上で、
今のへんてこなログアウト処理プログラムに至りました。
ごちゃごちゃしていないもっと良いログアウト処理プログラムはないでしょうか?


ご回答、よろしくお願いします。

A 回答 (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');
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
ブックマークされた場合とか、全く考えていなかったです・・・
確かに動作的に危ないですね。
仰るとおり、headerで飛ばせば、ワンクッションページがあっても
ログアウト処理が安全に行えて、無駄な画面は表示されないので良いですね!
非常に為になりました。

お礼日時:2014/11/19 15:02

><a href="toppage.php">ログアウト</a>


>とリンクを使用して作成したいです。

そのロジックだとtoppageにいったら必ずログアウトしてしまうけどいいの?

<a href="toppage.php?logout=1">ログアウト</a>

的な処理にしたらどうですか?
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます!
なるほど、GETを使用するやり方ですね。
確かに理にかなっていると思いますが、
できればURLをあっさりさせたいので、POSTを使用していました。

お礼日時:2014/11/19 15:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!