質問編集履歴

2

-

2017/09/08 16:24

投稿

kmito
kmito

スコア22

test CHANGED
File without changes
test CHANGED
@@ -1,113 +1 @@
1
- 最近、あるサイトのアップデートを行い、
2
-
3
- JavaからPHPで動作するものに変更しました。
4
-
5
-
6
-
7
- 移行後、ある現象について報告があったのですが
8
-
9
- なかなか再現せず何かヒントになる要因が探せないかと投稿しました。
10
-
11
-
12
-
13
- <前提>
14
-
15
- ・PHPのバージョンではphpファイルでなく、デザインもプログラムもhtmlの拡張子を使っている
16
-
17
- ・サイトはロードバランサを使用している
18
-
19
-
20
-
21
- <現象>
22
-
23
- サイト内で何かエラーになる要因が発生した場合、エラーコードを発行し、セッションに格納してエラーページに飛びセッションからエラーコードを取得・表示するがエラーコードが0(エラーコードが0のものはない)と表示されている。
24
-
25
-
26
-
27
- <現状分かっていること>
28
-
29
- ①サイト内のページでエラーが発生した場合、共通関数をまとめて置いているCommon.phpファイルからエラーページに飛ぶ関数を呼び出し、エラーページ(Error.html)へアクセスする。
30
-
31
-
32
-
33
- ②ページごとに初期化処理があり、その初期化はCommon.phpファイルから呼び出している。この処理の中でもエラー要因があった場合、同ファイルのエラーページに飛ぶ関数を呼び出し、エラーページ(Error.html)へアクセスする。
34
-
35
-
36
-
37
- ③ ①②ともにエラーコードをセッションに格納する前には必ず、session_start関数を呼んでいる。
38
-
39
-
40
-
41
- ④ ①②のエラーページに飛ぶ際にはheader関数を使用しており、直後にexit関数を呼んでいる。
42
-
43
-
44
-
45
- ⑤エラーページには初期化処理は入っておらず、session_start関数を呼んでいる。
46
-
47
-
48
-
49
- ⑥エラーページのPHPプログラム側でエラーコードのセッションを取得するが、もしエラーコードを格納したセッションがない場合は0を設定するようにしている。
50
-
51
-
52
-
53
- ⑦この現象についてキャッシュをクリアすることで解消できると報告がある。
54
-
55
-
56
-
57
- 最初は⑥からセッションがどこかで途切れているため0が入ったものだと予想したのですが、セッションが途切れた場合、エラーページ以外の初期化処理で別のセッションの値をチェックしている箇所があり、存在しない場合、別のエラーコードを発行してエラーページに移動するため、0になることはなさそうです。
58
-
59
-
60
-
61
- また、再現の調査を進めていくうちにPHP側のプログラムでよくあるセッションが切れてしまう要因についてあてはまるものがないことやプログラムの途中でセッションが途切れるような処理はどこにも見受けられないと思われ、プログラムが原因でなく、サイトの環境的な問題なのではないかと思い始めました。ただ、調査の範囲が広く、どこから見ていくべきかが不明な状態です。上記の少ない情報だけで要因が絞れるのかわからないのですが調査から数日経過してしまっています・・・。
62
-
63
-
64
-
65
- 何かご存じの方がいましたらご教授いただけないでしょうか。
66
-
67
-
68
-
69
- よろしくお願いします。
70
-
71
-
72
-
73
- <追記1>
74
-
75
- 回答頂きましてありがとうございます。現状で分かっていることを追記します。
76
-
77
-
78
-
79
- ・このサイトはhtml拡張子でphpプログラムが動作するように設定を行っている。
80
-
81
- ・サイトの構成としてはロードバランサ、およびAPサーバ3台を使用している。
82
-
83
- また、ロードバランサの振り分けはラウンドロビン方式になっている。
84
-
85
- ・php.iniからセッションはファイルで保持していることが分かった。
86
-
87
- session.save_handler = files
88
-
89
-
90
-
91
- ・php.iniからセッションの有効時間は1440秒(デフォルト?)であった
92
-
93
- session.gc_maxlifetime = 1440
94
-
95
-
96
-
97
- ・また、gcを起動させる設定値もデフォルト?であった
98
-
99
- session.gc_divisor = 1000
100
-
101
- session.gc_probability = 1
102
-
103
-
104
-
105
- ・ロードバランサの仕様については不明
106
-
107
- ・Javaで動いていたときはサーバにnginxを入れており、今回のアップデートでapacheにした。
108
-
109
- ・上記サイトは現場で作業しているものですが現場内のある人が今回の現象については今までjavaで動いていた
110
-
111
- ものをPHPに変えることでアクセスしてきた人がnginxからapacheに変わりセッションが一時的に上手く作られなかったのでは?という予想話をしていた。
112
-
113
- →インフラ系の知識に乏しく、日本語、内容的に正しいのか不明です。
1
+ --------------------------------------------------------------

1

情報の追加

2017/09/08 16:24

投稿

kmito
kmito

スコア22

test CHANGED
File without changes
test CHANGED
@@ -20,23 +20,17 @@
20
20
 
21
21
  <現象>
22
22
 
23
- サイト内で何かエラーになる要因が発生した場合、エラーコードを発行し、セッションに格納してエラーページに
24
-
25
- 飛びセッションからエラーコードを取得・表示するがエラーコードが0(エラーコードが0のものはない)と表示されている。
23
+ サイト内で何かエラーになる要因が発生した場合、エラーコードを発行し、セッションに格納してエラーページに飛びセッションからエラーコードを取得・表示するがエラーコードが0(エラーコードが0のものはない)と表示されている。
26
24
 
27
25
 
28
26
 
29
27
  <現状分かっていること>
30
28
 
31
- ①サイト内のページでエラーが発生した場合、共通関数をまとめて置いているCommon.phpファイルからエラーページに
29
+ ①サイト内のページでエラーが発生した場合、共通関数をまとめて置いているCommon.phpファイルからエラーページに飛ぶ関数を呼び出し、エラーページ(Error.html)へアクセスする。
32
-
33
- 飛ぶ関数を呼び出し、エラーページ(Error.html)へアクセスする。
34
30
 
35
31
 
36
32
 
37
- ②ページごとに初期化処理があり、その初期化はCommon.phpファイルから呼び出している。この処理の中でも
38
-
39
- エラー要因があった場合、同ファイルのエラーページに飛ぶ関数を呼び出し、エラーページ(Error.html)へアクセスする。
33
+ ②ページごとに初期化処理があり、その初期化はCommon.phpファイルから呼び出している。この処理の中でもエラー要因があった場合、同ファイルのエラーページに飛ぶ関数を呼び出し、エラーページ(Error.html)へアクセスする。
40
34
 
41
35
 
42
36
 
@@ -60,19 +54,11 @@
60
54
 
61
55
 
62
56
 
63
- 最初は⑥からセッションがどこかで途切れているため0が入ったものだと予想したのですが、セッションが
64
-
65
- 途切れた場合、エラーページ以外の初期化処理で別のセッションの値をチェックしている箇所があり、
66
-
67
- 存在しない場合、別のエラーコードを発行してエラーページに移動するため、0になることはなさそうです。
57
+ 最初は⑥からセッションがどこかで途切れているため0が入ったものだと予想したのですが、セッションが途切れた場合、エラーページ以外の初期化処理で別のセッションの値をチェックしている箇所があり、存在しない場合、別のエラーコードを発行してエラーページに移動するため、0になることはなさそうです。
68
58
 
69
59
 
70
60
 
71
- また、再現の調査を進めていくうちにPHP側のプログラムでよくあるセッションが切れてしまう要因についてあてはまるものがないことや
72
-
73
- プログラムの途中でセッションが途切れるような処理はどこにも見受けられないと思われ、プログラムが
74
-
75
- 原因でなく、サイトの環境的な問題なのではないかと思い始めました。ただ、調査の範囲が広く、どこから見ていくべきかが不明な状態です。上記の少ない情報だけで要因が絞れるのかわからないのですが調査から数日経過してしまっています・・・。
61
+ また、再現の調査を進めていくうちにPHP側のプログラムでよくあるセッションが切れてしまう要因についてあてはまるものがないことやプログラムの途中でセッションが途切れるような処理はどこにも見受けられないと思われ、プログラムが原因でなく、サイトの環境的な問題なのではないかと思い始めました。ただ、調査の範囲が広く、どこから見ていくべきかが不明な状態です。上記の少ない情報だけで要因が絞れるのかわからないのですが調査から数日経過してしまっています・・・。
76
62
 
77
63
 
78
64
 
@@ -81,3 +67,47 @@
81
67
 
82
68
 
83
69
  よろしくお願いします。
70
+
71
+
72
+
73
+ <追記1>
74
+
75
+ 回答頂きましてありがとうございます。現状で分かっていることを追記します。
76
+
77
+
78
+
79
+ ・このサイトはhtml拡張子でphpプログラムが動作するように設定を行っている。
80
+
81
+ ・サイトの構成としてはロードバランサ、およびAPサーバ3台を使用している。
82
+
83
+ また、ロードバランサの振り分けはラウンドロビン方式になっている。
84
+
85
+ ・php.iniからセッションはファイルで保持していることが分かった。
86
+
87
+ session.save_handler = files
88
+
89
+
90
+
91
+ ・php.iniからセッションの有効時間は1440秒(デフォルト?)であった
92
+
93
+ session.gc_maxlifetime = 1440
94
+
95
+
96
+
97
+ ・また、gcを起動させる設定値もデフォルト?であった
98
+
99
+ session.gc_divisor = 1000
100
+
101
+ session.gc_probability = 1
102
+
103
+
104
+
105
+ ・ロードバランサの仕様については不明
106
+
107
+ ・Javaで動いていたときはサーバにnginxを入れており、今回のアップデートでapacheにした。
108
+
109
+ ・上記サイトは現場で作業しているものですが現場内のある人が今回の現象については今までjavaで動いていた
110
+
111
+ ものをPHPに変えることでアクセスしてきた人がnginxからapacheに変わりセッションが一時的に上手く作られなかったのでは?という予想話をしていた。
112
+
113
+ →インフラ系の知識に乏しく、日本語、内容的に正しいのか不明です。