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

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

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

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

セッション

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

Q&A

解決済

4回答

356閲覧

PHPの環境的なセッション問題について

kmito

総合スコア22

PHP

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

セッション

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

0グッド

1クリップ

投稿2017/09/05 03:29

編集2017/09/08 16:24

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

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

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

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

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

m.ts10806

2017/09/05 04:08

「デザインもプログラムもhtmlの拡張子を使っている」ということは.htaccessなどでhtml拡張子でphpプログラムが動作するように設定を行っているということでしょうか?php.iniのsession.gc_maxlifetimeなど、sessionに関する設定はどうなっていますか?ソースコードも可能な範囲でご提示いただきたいのですが・・。
kmito

2017/09/05 07:05

ご回答ありがとうございます。現状で分かっている点について追記させていただきました。
Tak1016

2017/09/06 03:06

すごいな いろんな回答者が的確な回答をしてアドバイスをもらってるのに、無視して自己解決か。
s8_chu

2017/09/08 18:00

なぜ質問内容を大幅に編集したのでしょうか?
guest

回答4

0

セッションの保存先がFileになってたりして。
ロードバランサ使ってるならセッション保存先をDBとかRedisなどのNoSQLにしないとですね。

投稿2017/09/05 04:46

Tak1016

総合スコア1408

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

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

kmito

2017/09/05 07:05

ご回答ありがとうございます。現状で分かっている点について追記させていただきました。
Tak1016

2017/09/05 09:50 編集

だからセッションがfileになってたんですよね。 リクエストするたびにアクセスするサーバーが変わるからセッションを復元できてないんですよ。 DBセッションに変えましょう。 っていうかなんで低評価なのか理由がさっぱりわからん。正解を書くと低評価食らうのかこのサイトは。
guest

0

Take1016様の回答のままなのですが、ロードバランサーでどのサーバーにアクセスするかは保証されていないので、セッションをファイルで管理すると思わぬ不具合にあってしまいます。

リクエストと不具合の図式は下記のようになると思います。

ページサーバーセッション
1あるページサーバーAセッションファイル作成
2エラーページサーバーBセッションファイルなし(← エラーコードなし)

仮に、下記のようにセッションを作成したサーバーと同じサーバーにエラーページでもアクセスした場合は問題なくセッションにアクセスできるはずです。

ページサーバーセッション
1あるページサーバーAセッションファイル作成
2エラーページサーバーAエラーコードあり!

ミラーリングで異なるサーバー間でセッションファイルをミラーリングしてもタイミングが保証されていないので、Take1016様の回答にあるようにセッション管理をDBに移行したほうが全体的にシンプルになるかと思います。

これは、サーバーやエラーページとは関係ない問題で、本サーバー構成でのPHPでのセッション管理方法の問題です。そのため、shoko1様もロードバランサーの設定変更について言及しています。

下記のような2つのPHPを埋め込んだ異なるページでテストしてみてください。
最初に下記PHPコードのページにアクセスしてから、

php

1<?php 2session_start(); 3$_SESSION['test'] = 'これはセッションテストです。'; 4?>

次に、下記のPHPコードのページに何回かアクセスしてみます。コードと、結果を見ていただければ何が起きているのかわかると思います。何回かアクセスすると「セッションが空です。」が表示されるかと思います。

php

1<?php 2session_start(); 3if (empty($_SESSION)) { 4 echo 'セッションが空です。'; 5} 6else if (! isset($_SESSION['test'])) { 7 echo 'セッションキー「test」が存在しません。'; 8} 9else { 10 echo $_SESSION['test']; 11} 12?>

投稿2017/09/05 14:45

Tomak

総合スコア1652

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

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

0

プログラムに問題がないのであれば、

・サイトはロードバランサを使用している

ロードバランサはどのようにセッション維持していますか。
ロードバランサを外す、もしくはバランス先を1サーバとするなどで改善しませんか。

投稿2017/09/05 04:27

shoko1

総合スコア372

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

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

kmito

2017/09/05 07:06

ご回答ありがとうございます。現状で分かっている点について追記させていただきました。
Tak1016

2017/09/06 03:06 編集

コメントミスです。ごめんなさい。削除できない。
guest

0

自己解決

追記によるご回答ありがとうございます。

頂いた回答をもとに確認してみましたがやはり
セッションの管理方法に問題があったようです。

また、現象については環境から確率で起こることからも
再現がしづらいものだったとわかりました。

セッションの管理方法については現状ではよろしくないことを踏まえ、
DBなどの管理による別の方法を検討した上で話をすることにします。

ご協力いただきましてありがとうございました。

投稿2017/09/06 02:38

kmito

総合スコア22

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問