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

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

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

Q&A

解決済

1回答

3441閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

2クリップ

投稿2018/04/30 07:08

編集2018/04/30 07:09

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

参考: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>

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

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

投稿2018/05/02 09:22

u-ta

総合スコア60

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/05/02 11:49

「mypage.phpでログインしている状態とは 」← Sessionで判断しています。 今回困っているのがログアウトページ飛んでセッション削除→login.phpにアクセスすると自動で再ログインされてしまいます。 【login.php】の問題なのでしょうか。 他でログイン作った時はセッションでログイン判断、セッション削除でユーザーIDとパスワード再入力(手動)→ログイン状態。削除したあとは入力しないとダメでした。 ツイッターAPI呼び出してセッションなりなんなりを新たに削除する処理を追加しないと消えないのでしょうか。 よろしくお願いします。
u-ta

2018/05/03 02: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 04:29

ありがとうございます。勘違いしてました。 とりあえずスッキリしましたのでBAにさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問