QA@IT

[PHP]セッションが切れる原因

4245 PV

AjaxでリクエストをPOSTでPHPへ送り、
POSTデータを利用してWord(.docx)ファイルを作成(出力)し、
Wordファイル作成処理が完了したらJavaScript側でlocation.href={ダウンロードURL}
でファイルをダウンロード、という一連の処理をボタンのワンクリックで行っています。

Word出力の処理はJavaで実装しており、execにてコールしています。

そこでですがWordファイルが出力された後のlocation.hrefによるリクエスト時には、
なぜかセッションが切れてしまいます。

また、CSVファイルの出力も同様の流れで実装していますが、
こちらはセッションが保たれています。

両者の違いはCSV出力の方は全てPHPでコーディングしています。

JavaによるWord出力PGのほうですが、
簡単に書きますとHttpURLConnectionを利用してPHPにリクエストを投げ、
レスポンスデータをWordに差し込んで出力、という感じです。

Java→PHPのリクエスト時にクッキーでセッションIDを受け渡し等いろいろ
試みましたがダメでした。

exec("java -jar xxx");の実行直後ではまだセッションは切れていないようでしたので、
原因の箇所すらわかっておりません。

ちなみにJava→PHPのリクエスト時はセッションチェックは行っておりませんが、
session_start()は実行しております。

怪しい箇所や考えられる原因がありましたらご指摘ください。

[2014/02/06:追記]
原因が少しだけ分かった気がします。
セッションはセッションハンドラ(session_set_save_handler)を使って
DBに格納して読み書きしているのですが、location.href後のreadハンドラで
DBから読み取ったセッション情報が文字化けしています。。
現状、
HttpURLConnection.setRequestPropertyでContent-TypeをUTF-8でもダメ。
PrintWriterでPOSTデータをOutputStreamWriterでUTF-8指定して設定してもダメ。

ちなみにDBはOracleでキャラクタセットはUTF-8です。

[2014/02/06:追記2(解決)]
PHP側に原因がありました。
oci_connectの第4引数charsetにAL32UTF8を指定して接続するようにしたらOKでした。

ウォッチ

この質問への回答やコメントをメールでお知らせします。