Tomcat上で動作しているイントラのWebのコンテンツがあります。
サービスの要件として、Sessionの有効期限は3ヶ月になっています。
このSessionの中に最終アクセス時間を保持するように作ってあります。
1日1回夜間バッチでこのSessionの最終アクセス時間をDBに書き込むように
したいと考えているのですが、そもそも他のプログラムからSessionの値を
参照することは可能なのでしょうか?
イントラのシステムであり、Sessionに持っている値には重要なものはなく、
仮にセッションジャックされても大した被害になるようなものではないので
セキュリティはそれほど意識する必要はありません。
どなたかこういったことを実現出来るかどうか、出来るならどうするかご存知の方いらっしゃいませんか?
No.1ベストアンサー
- 回答日時:
こんにちは。
http://blog.goo.ne.jp/peugeot307hdi/e/afe55f317e …
こちらが参考になりますか?
簡単にやるならスタティックなMapにセッションIDをキーにして書き込んでおいてバッチでそのMapの中身を利用してDBに書き込むとかでしょうか。
リアルタイムな書き込みじゃ駄目なのでしょうか。負荷が高いとか?(ようはセッションをDBで扱うイメージ)
メモリ上にデータを残すということは、Tomcatが落ちると消えてしまいます。
早速のご回答ありがとうございます。
教えていただいたURLを参考にやってみます。
ちょっとすぐには検証できないですが・・・・
リアルタイムの更新は負荷を気にして避けようとしています。
前にチェックした時間から一定時間後のみDB更新という方法も考えてはいますが、
それだと本当の最終アクセス時間がとれなくなってしまう。
Tomcatが落ちた場合は仕方がないと諦めるつもりです。
今のバージョンにしてからは落ちたことがないことと、
最悪更新できなくても致命傷になるほどではないので。
更新できなくても致命傷にならない⇔精度の高い最終アクセス時間の書き込み
と若干矛盾してはいるんですが、異常のない状態で出来る限りのことをやろうと思っています。
No.3
- 回答日時:
Sessionが重要でないなら、作りこみは避けたほうが良いです。
蛇足ですが、Ans2の方の案をそのまま採用すると、
アプリの起動・停止と並列化に影響します。
ご回答ありがとうございます。
代替え案もないわけではないので、Sessionを読み込むことをやめることも
選択の一つだとは思っております。
ご指摘ありがとうございました。
No.2
- 回答日時:
こんなのはどうだろう。
コンテキストリスナーでWebアプリ起動時にスレッドを作り、Webアプリ終了時にスレッドを終了する。セッションリスナーでセッションの作成時にリストに加え、破棄時にリストからも破棄する。後はスレッドを10秒に一回回してリスト中の全セッションを操作する事ができる。これはあくまでサンプルなのでこのままでは使えない。これをweb.xmlに登録すると、Webアプリ実行中は10秒ごとに全セッションを回して情報を読み書きできる。深夜1回なら、次回実行時刻を記録して10秒ごとに実行時刻が来たら実行して次回実行時刻を1日後ろにするといった対応が必要だ。
~~~~ サンプルリスナー ~~~~
package net.example.javax.servlet;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import jp.co.syous.psn.lunch.common.action.LunchActionSupport;
import jp.co.syous.psn.lunch.common.action.LunchLoginInfo;
public class SampleSessionListener extends Thread implements ServletContextListener, HttpSessionListener, Runnable {
private List<HttpSession> sessionList = new ArrayList<HttpSession>();
private boolean loop = true;
@Override
public void sessionCreated(HttpSessionEvent hse) {
this.sessionList.add(hse.getSession());
}
@Override
public void sessionDestroyed(HttpSessionEvent hse) {
try {
this.sessionList.remove(hse.getSession());
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (this.loop) {
for (HttpSession session : this.sessionList) {
if (session == null) {
continue;
}
// TODO ここで全セッションに対して最終アクセス時間をDBに書き込む
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
this.loop = false;
}
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
this.loop = false;
try {
this.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void contextInitialized(ServletContextEvent sce) {
this.start();
}
}
ご回答ありがとうございます。
No.3の回答の方がこの実装方法には問題があるとご指摘くださってますので、
今回は見送りさせてもらうことになると思います。
技術的には何かしらの参考になるとは思いますので、
何かの機会に活かせればと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
- PHP sessioncookieをではなくcookieを使わなければならない理由について… 4 2022/11/07 13:01
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- サーバー ログオンユーザーがいない場合に自動再起動 1 2022/09/28 09:53
- PHP $_SESSIONに渡した後はそのまま使っても問題ありませんか? 3 2022/11/08 22:17
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Java Java モンスターブリーダー 1 2023/02/05 09:44
- Chrome(クローム) Chromeで検索するたびにウイルス感染(?)の警告がでます。 どうすれば解決しますか? 5 2023/02/06 14:40
- その他(パソコン・周辺機器) dvd書き込めない 5 2022/03/22 19:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ASP.NET 電卓計算
-
別ブラウザにセッションを渡す...
-
フレーム表示されているページ...
-
IE6で新しいウィンドウを開くと...
-
自分のPCへアクセスしているコ...
-
ボタンを押してセッション変数...
-
DVD-Rの「セッションを閉じる」...
-
コネクション・セッション・ト...
-
Q&Aフォームを作成したいのです...
-
チャレンジタッチの画面にスマ...
-
エクセルVBAで画面の大きさを取...
-
画面遷移が不正ですと表示されます
-
数字のみ入力可
-
【ASP.NET】ページ遷移してもGr...
-
Accessの画面更新を一時的に停...
-
【ASP.NET】フォームの継承は出...
-
Acrobatのツールボタンの消し方
-
ASP.NetのGridViewで任意の行ク...
-
VB.netでボリュームレベルメー...
-
【ASP.NET】マスターページに配...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コネクション・セッション・ト...
-
DVD-Rの「セッションを閉じる」...
-
コンピュータへの接続数が最大...
-
ブラウザの×(閉じる)ボタンの...
-
ブラウザを閉じずにセッション...
-
DVDの中身が表示されません。
-
セッションIDを取得したい
-
会社への勤怠届出にGoogleフォ...
-
フォームデータをlocation.repl...
-
ASP.NET 電卓計算
-
ルータのPPPのランプの色が変
-
セッションIDについて
-
SESSIDってなんですか?
-
自分のPCへアクセスしているコ...
-
DVDデータ追記時に、ポカ しま...
-
別ブラウザにセッションを渡す...
-
サーバー上の全セッション変数...
-
多段プロキシが原因?
-
CD-Rに追記したときに消え去っ...
-
ODBC-JDBCブリッジドライバを使...
おすすめ情報