🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

PHP

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

セッション

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

3回答

1414閲覧

Herokuに公開したPHPコードで値にセッションが保存されない

Chandler_Bing

総合スコア673

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

PHP

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

セッション

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

1クリップ

投稿2019/10/24 05:32

編集2019/10/25 07:58

実現しよとうとしていること

自分のデベロッパーのアカウントが友達追加された時、そのユーザーの情報を「セッション」に保存して
後のhtml(phpのビューファイル)で表示させる。

問題
友達追加があった際にそのユーザーのIDを取得できていることは確認しました。
しかし、次の遷移先ではNULLになっています。この原因について教えていただけると幸いです。

友達追加や、メッセージの送信があった際に、飛んでくるPHPページです。

php

1<?php 2 3/** 4 * Copyright 2016 LINE Corporation 5 * 6 * LINE Corporation licenses this file to you under the Apache License, 7 * version 2.0 (the "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at: 9 * 10 * https://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 14 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 15 * License for the specific language governing permissions and limitations 16 * under the License. 17 */ 18 19require_once("./LINEBotTiny.php"); 20//セッション開始 21session_start(); 22 23$channelAccessToken = "My channelAccessToken "; 24$channelSecret = "My channelSecret"; 25 26$client = new LINEBotTiny($channelAccessToken, $channelSecret); 27foreach ($client->parseEvents() as $event) { 28 switch ($event["type"]) { 29 case "message": 30 $message = $event["message"]; 31 switch ($message["type"]) { 32 case "text": 33 $client->replyMessage([ 34 "replyToken" => $event["replyToken"], 35 "messages" => [ 36 [ 37 "type" => "text", 38 "text" => $message["text"] 39 ] 40 ] 41 ]); 42 break; 43 default: 44 error_log("Unsupported message type: " . $message["type"]); 45 break; 46 } 47 break; 48 case "follow": 49 // ユーザーIDを取得 50 $source = $event["source"]; 51 $line_user_id = $source["userId"]; 52 $_SESSION["line_user_id"] = $line_user_id; 53 $client->replyMessage([ 54 "replyToken" => $event["replyToken"], 55 "messages" => [ 56 [ 57 "type" => "text", 58 "text" => "友達追加ありがとうございます。あなたのLINEユーザーID(承認用)は" . $line_user_id . "です。以下のURLより社員確認をしてください。https://linebotsystem1011.herokuapp.com/verification_user.html" 59 ] 60 ] 61 ]); 62 break; 63 default: 64 error_log("Unsupported event type: " . $event["type"]); 65 break; 66 } 67};

この次にHTMLに飛び、そこで値を入力した後、コントローラーに遷移します。
そこのコントローラーで$_SESSION["line_user_id"]に値があるかないかで条件分岐しているのですが、NULLになっています。

コントローラー

php

1<?php 2 session_start(); 3 var_dump($_SESSION["line_user_id"]); 4 5 if ($_SERVER["REQUEST_METHOD"] === "POST") { 6 7 // すでに友達登録を済ませていれば 8 if ($_SESSION["line_user_id"] != null) { 9 if ($_POST["emp_no"] != "" && $_POST["emp_no"] == "1234") { 10 $_SESSION["emp_no"] = $_POST["emp_no"]; 11 } 12 13 if ($_POST["emp_pass"] != "" && $_POST["emp_pass"] == "password") { 14 $_SESSION["emp_pass"] = $_POST["emp_pass"]; 15 } 16 17 if ($_SESSION["emp_no"] != null && $_SESSION["emp_pass"] != null) { 18 header("Location: https://linebotsystem1011.herokuapp.com/verification_confirmation.php"); 19 exit; 20 } else { 21 header("Location: https://linebotsystem1011.herokuapp.com/lapse.html"); 22 exit; 23 } 24 }else{ 25 var_dump("line_user_id is empty"); 26 exit(); 27 } 28 }else{ 29 var_dump("It's not considered a post request"); 30 exit(); 31 } 32 33 exit();

追記⓵
1番初めの記載コードのsession_start()を先頭に書いても同じでした。

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

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

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

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

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

dice142

2019/10/24 07:39

がっつりアクセストークンとか載せてますが大丈夫ですか?
Chandler_Bing

2019/10/24 07:40

問題ないです。 よろしければ解決方法を教えていただければ幸いです。
m.ts10806

2019/10/24 07:45

悪さされても文句言わないということですよね。たぶん結構色んなことできますよ。私はやりませんけど、世界中に公開されてるわけですから(編集したところで履歴から見れますし) 何されてもline側から訴えられるのは公開したあなたです。
m.ts10806

2019/10/24 08:03

「ページ」なのに何も表示されている様子がない 「コントローラー」と書いているがただのベタ書きコードでコントローラーの役割をしているか判断できるものがない 「飛ぶ」ってなんのことを言っているかわからないしコードにはそれらしきものがない 「遷移先」との関連性が全く不明 アクセスキー問題(セキュリティ意識の欠落。) 必要な情報を全く出さずに何を答えろと言うのでしょうか。完璧な質問は無理にしても少しは他人の視点で自分の質問読んでから投稿できませんか? まあこの投稿が原因でデベロッパーから権利剥奪されたとしても誰も知ったこっちゃないので。
morumaru

2019/10/25 01:44

さすがにセキュリティ意識なさすぎるのでエンジニア目指しているのであれば、今すぐにやめて別の業種を目指してください。迷惑です。
dice142

2019/10/25 05:22

流石に寝覚めが悪いので、未対処を想定して忠告します。 アクセストークン等を公開すると、他の人もそれを使っていろいろできます。 あなたが想定しない悪い使い方をする人がいるかも知れません。 既に回答がついてますので削除申請しても通るか不明ですが、まずはしてみてください。 後はLINE BOTですかね。そちらの方の設定でアクセストークン等を再生成等して 公開済みのものを使えなく出来ないか確認して、できるのであればやってください。
dice142

2019/10/25 05:26

まあはっきり言わなかった私も悪いですが、 公開してないものを公開したことに対して指摘を受けて「大丈夫です」で返答して何も対処しないのは開発者としてヤバいです。 趣味とか業務問わずヤバいです。
Chandler_Bing

2019/10/25 07:59

トークンも再発行しました。
guest

回答3

0

この質問についた回答にあるようにきちんとデバッグしてください。

投稿2019/10/24 05:59

編集2019/10/24 06:04
m.ts10806

総合スコア80875

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

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

yoorwm

2019/10/24 06:17

あと、ログの確認を出来るようにしておくとイイですね
Chandler_Bing

2019/10/24 06:23

ありがとうございます。しかし、外部に公開しているコードのログを取得するのでしょうか。
m.ts10806

2019/10/24 06:32 編集

何ヵ月も前の自分の質問を持ち出されていることに何も感じないか。 言ってることも何にも応えてないし相変わらず意味不明。 回答者はあなたの先輩や同僚、友達ですらないんだからちゃんと書きましょう。
guest

0

ベストアンサー

構成がどうなっているのか質問文から確実なところがわかりませんが、
1つめのコードがLINEのWebhook URLで動作するPHP
2つ目のコードがブラウザで表示するページ内で動かすPHPに見えます。

Webhook URLで設定したものはイベントが発生した際にLINEからのアクセスがきます。
2つ目のコードはどこで動くものかわかりませんが、使っている端末のブラウザがアクセスするものじゃないでしょうか。
別セッションというか、クライアント自体別なので$_SESSIONは引き継げません。

投稿2019/10/24 08:34

Eggpan

総合スコア3205

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

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

Chandler_Bing

2019/10/25 00:38

その通りです。 何かの方法で、値を保存しておく方法はないでしょうか。 よろしくお願いします。
Eggpan

2019/10/26 07:50

書いた内容は全て合ってた、という事ですかね。 であれば、まずは考え、調べてみてください。 質問内容と回答が食い違う事になりますので、追加の回答が必要でしたら質問に追加いただくか、別質問にするなどしてください。
guest

0

既存の回答と同じくデバッグしてくださいになりますが。

セッションから取得したときにNULLならセットした値がNULLかどうか確認してください。
それもNULLなら取得時ではなくセット時が問題です。
セットしたときにNULLじゃないならセッションの使い方が問題の可能性が高いです。


[追記]

質問文ちゃんと読んだらHerokuで発生するんですね。
とはいえ私では知識不足で解決まで導けそうにないので検索キーワードのみ追記します。

ローカルで起こらずHerokuでのみ怒るなら
「heroku php session 消える」等で検索してみましょう。
「消える」の部分は状況によって変えるなり英語にするなりしてみると良いかと思います。

ローカルでも起こるなら
「php session 消える」で検索してみてください。
設定が原因のこともあるようですのでそちらの方も探してみてください。

投稿2019/10/24 07:48

編集2019/10/24 08:07
dice142

総合スコア5158

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

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

Chandler_Bing

2019/10/24 07:53

セットした値はNULLではないです。 メッセージとして返信できているので、、、、。
dice142

2019/10/24 08:08

これ以上は私では力不足なので検索キーワードを回答に追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問