[JavaScript]setTimeoutで通信制御するとPHPのセッションがなぜか切れる

チップス

追伸:settimeoutで通信制御を行うことをやめて該当の問題は解決しませんでした。したがって、この記事は有用ではありません(2023/07/15)ただコールバック地獄などになろうとも、setTimeoutで制御しないほうがいいとはコード可読性の観点から思ったりしますけどね。


 

結論から言うとsetTimeoutで通信の戻りを制御することは辞めたほうがいい。

ひとまず実装したい機能を横着してsetTimeoutで実行した(単位時間あたり通信を行ったのち通信が完了しているか否かを確認する)関数で結果を補足。

その後の処理を分けるような仕様でひとまず実装。その通信は複数通信行うことがある。例えば10回の通信を行うとすると、10回は線形的にリクエストするが、戻りはWebサーバの都合などでランダムに返される(おそらくこれが原因で)PHPのセッションが切断される…ということが起こってしまう。JavaScriptがレスポンスを正常に受けることができていないのではないだろうか?と疑っている。

通信の状況やJavaScript側のログがどうなっているのか?コールバック関数などでエラー情報を補足していない(というかsetTimeoutで制御しているのでできない)async/awaitなどを使えばもう少し便利で分かりやすくかつ確実なものができたかもしれないが、確信がなく(使った知見がなく)使えなかった。今後使わなくては…。そういえばだいぶ昔に(私が作成したものではないが)setTimeoutで通信制御をして「上手く動いていない」コードに頭を悩ましている人に遭遇したことがある。

理論上は上手く行きそうだが、setTimeoutはアニメーションやちょっとしたタイマーのせいぎょなどにもちいる関数なのであって、通信を制御するファンクションではなのだ。当たり前だと言われればそれまでだけど、できそうなことをやらないのは違うと思うんですよね。というお話でした。


 

そういえば、デジタル庁のサイトがイケていると話題になっています。個人的にはテキストの境界が分かりにくいので何がイケているのかわからないです。CDN使っていて超高速なのはいいですがそれって別にアクセシビリティにそこまで影響を与えないような?というわけで、でもこれがイケてるならこの手のデザインで1つ自社Webページを作ってもいいかなと思います。コンテンツを増やすのはやりやすそうな印象。

チップス
スポンサーリンク
シェアする
gomiryoをフォローする
ごみぶろぐ

コメント

タイトルとURLをコピーしました