質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • PHP

    19848questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ツイッターのAPI(twitteroauth)を使ったログアウト処理

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 133
退会済みユーザー

退会済みユーザー

下記の記事を参考にログインを実装したのですが、ログアウト処理でなぜかできず、そのまま再度ログインできてしまいます。

参考:https://qiita.com/sofpyon/items/982fe3a9ccebd8702867

$_SESSION、$__REQUESTなどそれっぽい値は0で、唯一残っている$_COOKIE
の値を削除しようとしてもできません。

【login.php】
<?php

session_start();

require_once 'common.php';
require_once 'twitteroauth/autoload.php';

use Abraham\TwitterOAuth\TwitterOAuth;

//TwitterOAuth をインスタンス化
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);

//コールバックURLをここでセット
$request_token = $connection->oauth('oauth/request_token', array('oauth_callback' => OAUTH_CALLBACK));

//callback.phpで使うのでセッションに入れる
$_SESSION['oauth_token'] = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];

//Twitter.com 上の認証画面のURLを取得( この行についてはコメント欄も参照 )
$url = $connection->url('oauth/authenticate', array('oauth_token' => $request_token['oauth_token']));

//Twitter.com の認証画面へリダイレクト
header( 'location: '. $url );
【callback.php】
<?php

session_start();

require_once 'common.php';
require_once 'twitteroauth/autoload.php';

use Abraham\TwitterOAuth\TwitterOAuth;

//login.phpでセットしたセッション
$request_token = [];  // [] は array() の短縮記法。詳しくは以下の「追々記」参照
$request_token['oauth_token'] = $_SESSION['oauth_token'];
$request_token['oauth_token_secret'] = $_SESSION['oauth_token_secret'];

//Twitterから返されたOAuthトークンと、あらかじめlogin.phpで入れておいたセッション上のものと一致するかをチェック
if (isset($_REQUEST['oauth_token']) && $request_token['oauth_token'] !== $_REQUEST['oauth_token']) {
    die( 'Error!' );
}

//OAuth トークンも用いて TwitterOAuth をインスタンス化
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $request_token['oauth_token'], $request_token['oauth_token_secret']);

//アプリでは、access_token(配列になっています)をうまく使って、Twitter上のアカウントを操作していきます
$_SESSION['access_token'] = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier']));
/*
ちなみに、この変数の中に、OAuthトークンとトークンシークレットが配列となって入っています。
*/

//セッションIDをリジェネレート
session_regenerate_id();

//マイページへリダイレクト
header( 'location: /mypage.php' );
【logout.php】

<?php

// ログアウトページ

// セッション開始
session_start();

?>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ログアウトページ</title>

</head>

<?

// セッション残っていたら削除開始
if (isset($_SESSION["oauth_token"]) || isset($_SESSION["oauth_token_secret"]) || isset($_SESSION['oauth_verifier'])) {

// セッション変数を全て削除
$_SESSION = array();
$_REQUEST = array();

// セッションの登録データを削除
session_destroy();

// クッキーの値を格納
//$value = $_COOKIE['xxxxx'];

setcookie('xxxxx', '', time() - 1800);
//setcookie('hoge', $value, time() - 1800);
var_dump($_COOKIE);


echo 'ログアウト処理完了';

}else {

  header('Location: login.php');

}

//var_dump($_SESSION);
//var_dump($_REQUEST);
//var_dump($_COOKIE);

?>

<a href="login.php">ログインページへ戻る</a>
<p>
<p>
<body>
</body>
</html>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

mypage.phpでログインしている状態とは

Sessionの値を見ているのですか?
それともCookieの値ですか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/02 20:49

    「mypage.phpでログインしている状態とは 」← Sessionで判断しています。

    今回困っているのがログアウトページ飛んでセッション削除→login.phpにアクセスすると自動で再ログインされてしまいます。

    【login.php】の問題なのでしょうか。

    他でログイン作った時はセッションでログイン判断、セッション削除でユーザーIDとパスワード再入力(手動)→ログイン状態。削除したあとは入力しないとダメでした。

    ツイッターAPI呼び出してセッションなりなんなりを新たに削除する処理を追加しないと消えないのでしょうか。

    よろしくお願いします。

    キャンセル

  • 2018/05/03 11:37

    再ログインというのがTwitterのログイン・連携を指しているのでしたら
    コードを見ると「$url = $connection->url('oauth/authenticate'」となっているので
    作成したTwitterアプリとの連携(login.phpからリダイレクトされたTwittter画面)は

    初回
    =====
    「{{TwitterAppName}}にアカウントの利用を許可しますか?
    連携アプリを認証ボタン キャンセルボタン」

    すでに認証している場合
    =====
    「アプリケーションに戻ります、しばらくお待ちください。」

    となり、連携の再認証は求めません。


    認証用URLの作成には2つあり
    authenticateはauthorizeと違って一度認証していれば再認証を求めません。
    https://developer.twitter.com/en/docs/basics/authentication/api-reference/authenticate
    https://developer.twitter.com/en/docs/basics/authentication/api-reference/authorize

    なので、authorizeを使えば
    login.phpからリダイレクトしても毎回再認証が表示されます。

    authenticateから引用
    This method differs from GET oauth / authorize in that if the user has already granted the application permission, the redirect will occur without the user having to re-approve the application.

    キャンセル

  • 2018/05/03 13:29

    ありがとうございます。勘違いしてました。

    とりあえずスッキリしましたのでBAにさせていただきます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    19848questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。