

皆さん、こんにちはこんばんは。
WordPressの公開画面側でajaxを使ったリクエスト処理を行った時にセッションが切れてしまう問題がありました。
今回私が解決した方法をご紹介します。
原因は?
管理画面側のドメインと公開画面側のドメインが違っていたのが原因でした。
はい、かなりの凡ミスですね…。
Wordpressの構造を特に変わった構造にしていなければ管理画面側と公開画面側のドメインが別になることはないのですが、
私の場合は管理画面側のドメインを”admin.domain.com”のような”admin”というサブドメインで運用していたのが問題でした。
ただ、こういった構成で運用している方も少なくはないかと思いますので、解決方法をご紹介します。
解決方法
※サーバーの設定によってはこれだけでは解決しないことがあります。
私の場合はajaxのリクエスト処理の以下の部分を追加することで解決しました。
1 2 3 4 5 |
$.ajax({ xhrFields: { withCredentials: true } }) |
ajaxのリクエスト先では管理画面側のドメインへリクエストを送信するので、CORS問題が発生します。
CORSの問題に深くは触れませんが、デフォルトではクロスオリジン間でのクッキーの送信が行われません。
セッションはクッキーが送信されない場合紐付けることができないため、”セッションが切れた”という現象になってしまいます。
そこでajaxのオプションであるxhrFieldsの”withCredentials”を付与してあげるとクッキーの送信が行われるためajaxでもセッションが切れずにリクエストの処理を行えるようになります。
上記の設定でもCORS問題が解決されない場合、サーバー側でリソースの共有が拒否されている可能性があります。
その場合、サーバー側で以下のようにリソース共有を許可するドメインを指定してあげましょう。
.htaccessの場合
1 |
Header set Access-Control-Allow-Origin https://domain.com |
phpでHeaderを出力する場合
1 |
header("Access-Control-Allow-Origin: https://domain.com"); |
すべてのリクエストに対してリソース共有を行う場合は”*”(アスタリスク)を設定することでどこからでもリクエストを行えるようになります。
※すべてのリクエストに対してリソース共有を行う場合はセキュリティ上Headerに使い切りトークンなどを設けて別途対策が必要になります。
最後に
ajax処理時にセッションが切れてしまう問題に関して、いかがでしたでしょうか。
今回私の場合はうっかりミスでしたが、以外と見落としがちな部分ではないでしょうか?
デフォルトのWordpressであればドメインが別になることがないので気にするところではないですが、運用上分けたいといったところだと発生するリスクもあるので、
是非セッション切れの解決策の参考にしてみてください。