2017年10月20日(金)
[PHP] セッションテスト #■パソコン・通信 セッション・スタートを宣言した複数のページ間で、共通のセッション変数を利用することができます。
--
<?php
session_start();
?>
--
大変に便利な機能なのですが、通常はセッション有効時間が最後のアクセスから180分に設定されていますので、その時間を過ぎると、設定したセッション変数が無効になります。
セッション変数が無効になっていた場合、プログラミングがめちゃくちゃになります。そうならないように、セッション変数をチェックしてから使用します。
--
<?php
session_start();
if(!isset($_SESSION["sesami"])){
echo 'Error!';
exit;
}
?>
--
弊社のWebアプリケーションは、ブラウザでログインして、システムに入ります。作業中、ページが切り替わる度に、セッション有効時間が180分にリセットされます。最後のページを開いて180分より長く時間が経過した場合、ログインが無効になり、エラー表示していました。これでは、最後のページで作業した内容がふいになってしまいます。
そこで、再ログインできるように開発中です。
セッションテストを行ったファイルを公開しますので、試してみて下さい。
【フロチャート】
session1_login_input.html
│ ↑
↓ │no
session2_login_check.php ←直接×
<ログイン>
│yes
↓
session3_form_input.php ※$_SESSION["sesami"]確認
│
↓
session3a_session_check.php ←直接×
┌─<セッション>
有│ ↓無効
効│ <再ログイン>→no 何もしない
│ ↓yes
│ session3b_login_check.php ←直接×
│ │
↓送信↓
session4_form_output.php ※$_SESSION["sesami"]確認
【ポイント1】
セッション有効時間が過ぎた場合、セッション変数は無効になりますが、セッションIDは同じままです。
--
session_id()
--
【ポイント2】
session3_form_input.phpの<iframe></iframe>内に、session3a_session_check.phpを呼び出して、セッション状況をチェックします。
セッションが有効であれば、session3_form_input.phpのフォームを送信します。
セッションが無効であれば、再ログインのダイアログを表示します。パスワードが合っていれば、session3_form_input.phpのフォームを送信します。違っていれば、送信しません。
なお、実際には、<iframe></iframe>を非表示にします。
P.S. PHPファイルは、クライアントに対して、プログラミングが見えません。今回は、ブログが煩雑になりますので、プログラミングソースの公開は控えさせて頂きますが、簡単なものです。
P.S.2 『子猫の手 [Network Communication Note]』におけるセッションは、ガチガチにセキュリティを高めていますので、このロジックを組み込むには、結構、骨が折れます。
P.S.3 オリジナル・ダイアログを組み込みました。
https://neconote.jp/prg/session1_login_input.html