ガレコレ [Garage Collection]
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
 
お問い合わせ


by Network Communication Note