Tomcat上で動作しているイントラのWebのコンテンツがあります。
サービスの要件として、Sessionの有効期限は3ヶ月になっています。
このSessionの中に最終アクセス時間を保持するように作ってあります。
1日1回夜間バッチでこのSessionの最終アクセス時間をDBに書き込むように
したいと考えているのですが、そもそも他のプログラムからSessionの値を
参照することは可能なのでしょうか?
イントラのシステムであり、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の回答の方がこの実装方法には問題があるとご指摘くださってますので、
今回は見送りさせてもらうことになると思います。
技術的には何かしらの参考になるとは思いますので、
何かの機会に活かせればと思います。
No.1ベストアンサー
- 回答日時:
こんにちは。
http://blog.goo.ne.jp/peugeot307hdi/e/afe55f317e …
こちらが参考になりますか?
簡単にやるならスタティックなMapにセッションIDをキーにして書き込んでおいてバッチでそのMapの中身を利用してDBに書き込むとかでしょうか。
リアルタイムな書き込みじゃ駄目なのでしょうか。負荷が高いとか?(ようはセッションをDBで扱うイメージ)
メモリ上にデータを残すということは、Tomcatが落ちると消えてしまいます。
早速のご回答ありがとうございます。
教えていただいたURLを参考にやってみます。
ちょっとすぐには検証できないですが・・・・
リアルタイムの更新は負荷を気にして避けようとしています。
前にチェックした時間から一定時間後のみDB更新という方法も考えてはいますが、
それだと本当の最終アクセス時間がとれなくなってしまう。
Tomcatが落ちた場合は仕方がないと諦めるつもりです。
今のバージョンにしてからは落ちたことがないことと、
最悪更新できなくても致命傷になるほどではないので。
更新できなくても致命傷にならない⇔精度の高い最終アクセス時間の書き込み
と若干矛盾してはいるんですが、異常のない状態で出来る限りのことをやろうと思っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DVD-Rの「セッションを閉じる」...
-
コネクション・セッション・ト...
-
大量のTCPセッションについて
-
JSPでポップアップウィンド...
-
セッションIDについて
-
セッションハイジャックの対策...
-
Accessの画面更新を一時的に停...
-
DataGridViewのチェックボック...
-
ASPで画面間のパラメタ受け渡し
-
HTTPリクエストヘッダーの設定...
-
PreTranslateMessageで音がする
-
VBAでHTTPログイン
-
指定されるdiv の部分の再読み...
-
エクセルVBAで画面の大きさを取...
-
HTMLについて教えてください。 ...
-
aspxをhtmlに変換する方法について
-
Webページ上のボタン等の位置を...
-
選択によって処理の変更
-
HTMLボタンの文字色を変え...
-
asp.netにてgridviewの列を動的...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コネクション・セッション・ト...
-
DVD-Rの「セッションを閉じる」...
-
ブラウザの×(閉じる)ボタンの...
-
コンピュータへの接続数が最大...
-
セッションIDを取得したい
-
DVDの中身が表示されません。
-
フォームデータをlocation.repl...
-
ブラウザを閉じずにセッション...
-
会社への勤怠届出にGoogleフォ...
-
セッションIDについて
-
SESSIDってなんですか?
-
ディスクのセッションを閉じる...
-
助けて下さい!!セッション変...
-
Apacheでセッション管理
-
ASP.net MVC セッションハイジ...
-
ASPで別ページにPOSTで送信した...
-
自分のPCへアクセスしているコ...
-
JSPでポップアップウィンド...
-
WebBrowserを初期化
-
遠隔操作されてる?
おすすめ情報