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

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

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

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

PHP

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Q&A

0回答

390閲覧

リダイレクト後に$_SESSIONが保存されません。

退会済みユーザー

退会済みユーザー

総合スコア0

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

PHP

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

0グッド

1クリップ

投稿2018/10/06 08:18

編集2018/10/07 07:11

自作のツイッターアプリを自分のアカウントで認証しようとしていますがうまくいきません。

common.php

php

1 2<?php 3define('CONSUMER_KEY', 'xxxxxxxxxxx'); 4define('CONSUMER_SECRET', 'xxxxxxxxxxx'); 5define('OAUTH_CALLBACK', '/twitter/callback.php');

login.php

php

1<?php 2session_start(); 3 4require_once "common.php"; 5require_once "/twitteroauth/autoload.php"; 6 7use Abraham\TwitterOAuth\TwitterOAuth; 8 9$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); 10 11 12$request_token = $connection->oauth('oauth/request_token', array('oauth_callback' => OAUTH_CALLBACK)); 13 14$_SESSION['oauth_token'] = $request_token['oauth_token']; 15$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret']; 16 17$url = $connection->url('oauth/authenticate', array('oauth_token' => $request_token['oauth_token'])); 18 19header("location: ".$url);

callback.php

php

1<?php 2session_start(); 3 4require_once "common.php"; 5require_once "/twitteroauth/autoload.php"; 6 7use Abraham\TwitterOAuth\TwitterOAuth; 8 9$request_token = []; 10 11var_dump($_SESSION); 12 13$request_token['oauth_token'] = $_SESSION['oauth_token']; 14$request_token['oauth_token_secret'] = $_SESSION['oauth_token_secret']; 15 16if (isset($_REQUEST['oauthtoken']) && $request_token['oauth_token'] !== $_REQUEST['oauth_token']) { 17 die("Error!"); 18} 19 20$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $request_token['oauth_token'], $request_token['oauth_token_secret']); 21 22header("location", "mypage.php");

mypage.php

php

1<?php 2session_start(); 3 4require_once "common.php"; 5require_once '/twitteroauth/autoload.php'; 6 7use Abraham\TwitterOAuth\TwitterOAuth; 8 9$access_token = $_SESSION['access_token']; 10 11$connection = new Twitter(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_seret']); 12 13$user = $connection->get("account/verify_credntials"); 14 15var_dump($user); 16 17echo $access_token['oauth_token']."\n".$access_token['oauth_token_seret'];

認証ボタンを押した後のcallback.phpで

Notice: Undefined index: oauth_token in callback.php on line 14 Notice: Undefined index: oauth_token_secret in callback.php on line 15

というエラーが出てきます。

var_dump($_SESSION)は

array(0) { }

で、$_SESSIONが保存されていないようです。

セッションが保存されない原因は何でしょうか?

環境は
PHP7
Google Chrome
で、ローカルで動かしています。

追記1
login.phpでvar_dump($request_token)したところ

array(3) { ["oauth_token"]=> string(27) "Eb8QEgAAAAAA6V55AAABZk08S6E" ["oauth_token_secret"]=> string(32) "FcJGrcDCGGImPrxvlPztnoBC4gJEGCiD" ["oauth_callback_confirmed"]=> string(4) "true" }

と出ました。

callback.phpでvar_dump($_COOKIE["PHPSESSID"]);で出た文字列と、xampp/tmpに入っている最新のセッションファイルのsess_以降の文字列は違うものでした。

追記2
session_id()を使ってlogin.phpとcallback.phpでのセッションIDを比較しました。
login.phpではma7b486qh9tt1rbpejfs7i45ul
callback.phpではa7if3osv2vc17qbgs8eupk4rf8
でした。

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

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

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

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

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

m.ts10806

2018/10/06 11:10

質問内の解説文が「$_SESSEION」になってます。 connectionから$request_tokenを受け取った直後に$request_tokenをしてみましたか?そもそも正しく値が入っているかどうか確かめてください。
退会済みユーザー

退会済みユーザー

2018/10/06 13:27

基本的なことだけど session_id は同一ですか? ちがったら取り出せませんよ
退会済みユーザー

退会済みユーザー

2018/10/07 06:21

$request_tokenには正しく値が入っていました。
m.ts10806

2018/10/07 06:22

どのように確かめられたのでしょうか。
退会済みユーザー

退会済みユーザー

2018/10/07 06:25

login.phpで$request_token = $connection->oauth('oauth/request_token', array('oauth_callback' => OAUTH_CALLBACK));のあとにvar_dump($request_token);です
m.ts10806

2018/10/07 06:28

提示可能であれば質問本文に追記していただきたく。またセッションIDも変数に格納したphpとリダイレクト先で同じか確かめてみてください。URLが同一ドメイン(サーバー)内でなければセッションもかわるので、気になるのはURLですね
退会済みユーザー

退会済みユーザー

2018/10/07 06:41

追記しました。リダイレクト先でセッションIDを調べるにはどうすればいいですか?
m.ts10806

2018/10/07 07:00

比較しなきゃいけないのでリダイレクト元でも出力しなきゃいけませんよね。元と先で何が違いますか?
m.ts10806

2018/10/07 07:02

サーバー、ドメイン 違うんじゃないですか?同一セッション内じゃないってことですよね
退会済みユーザー

退会済みユーザー

2018/10/07 07:05

リダイレクト先ってtwitterのことだと思ってましたが、もしかしてcallback.phpのことですか?
退会済みユーザー

退会済みユーザー

2018/10/07 07:13

追記しました。
m.ts10806

2018/10/07 07:18

よく考えたら一度外部サービスに投げてるからセッションは保証されなさそうな気がしますね。別の渡し方を検討された方がいいかもしれません。callback.phpにQueryStringつけでGETで受けとるとか
退会済みユーザー

退会済みユーザー

2018/10/07 10:21

common.php を追記してください。
退会済みユーザー

退会済みユーザー

2018/10/07 13:19

common.phpに何を追記すればいいですか?
退会済みユーザー

退会済みユーザー

2018/10/07 13:22

もう一度いいます。common.php 「を」追記してください。
退会済みユーザー

退会済みユーザー

2018/10/07 13:24

なぜ追記する必要があるんですか?
退会済みユーザー

退会済みユーザー

2018/10/07 13:27

あなたしか知らないコードでなにがおこなわれててもこちらは関与できないからですが。
退会済みユーザー

退会済みユーザー

2018/10/07 13:30

consumer key、consumer secret、私のIPアドレスを晒せということですか?
退会済みユーザー

退会済みユーザー

2018/10/07 13:31

ああ一番上にあったのですべてってことでいいのね
退会済みユーザー

退会済みユーザー

2018/10/07 13:32

はい
退会済みユーザー

退会済みユーザー

2018/10/07 13:37

login.php と callback.php で同じドメインもしくはIP表記になってますか?
退会済みユーザー

退会済みユーザー

2018/10/07 13:44 編集

同じIP表記です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問