今回、ノコテック・ラボとして「感激!ネット英会話留学」という新規サイトを立ち上げました。
このサイトを構築をする上で様々な技術を使っているのですが、一番悩んだことは会員登録の際のセッションの問題です。
一般の人にはなじみがないと思いますが、セッションというのは、ページにログインした状態でサーバー側とクライアント側で保持される情報で、皆さんがご存知のクッキーファイルがその情報を保持しています。
問題は、会員登録などをするページはSSLという暗号化して情報を送るページなのですが、このページでログインしてから、通常のページに移行するとセッションが切れてしまうという現象です。
一般には、この問題は独自SSLを契約していると問題ないようなのですが、独自SSLの契約にはかなりお金がかかります。そこで、共有SSLページと通常ページの間でセッションを維持するためにはどのようにしたらいいのか?という問題を解決する必要がありました。
簡単に言えば、共有SSLのページで作られたセッションは、通常ページには持ち越せないということなので、共有SSLのページでセッションを作ることは無駄ということです。
しかし、情報の入力は安全でなければならないので共有SSLのページで行うことは必須です。要は、そのログインした事実を通常のページに伝え、その上でセッションを確立するという手順が必要になるということです。
このために行った手順は、ログインの事実をMySQLのデータベース内に格納し、その格納した情報を手掛かりに通常ページからMySQLデータベースにアクセスして、その情報があればセッションを確立するという手順です。
ただし、格納した情報を共有SSLのページから通常ページに伝える必要があるので、ページ間はGET送信で伝えるのですが、そこでURLにGET送信の情報が見えてしまうという危険性があります。
そこで、GET送信を受け取るPHPでは表示を行わないことと、送信した情報は一時的な情報としてMySQLデータベースから削除するという手法を考えました。
この情報を受け取るPHPページでセッションを確立して、その後、通常ページに飛ばすことで、見た目上は、自然にセッションが確立されたように見えます。
これらの手法は、昔からあるように思うのですが、セキュリティの問題もあるので、ネットを検索してもまずそのような手法を公開しているところはありません。
今回、一週間ほど試行錯誤して上記の方法でうまくいくことを確認しました。
ということで、会員サイトを構築されるような方は参考にしてください。