C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: ASP.NET セッション ハートビート


(過去ログ 16 を表示中)

[トピック内 24 記事 (1 - 20 表示)]  << 0 | 1 >>

■5878 / inTopicNo.1)  ASP.NET セッション ハートビート
  
□投稿者/ たろ (1回)-(2007/07/25(Wed) 11:54:31)

分類:[.NET 全般] 

開発環境:windowsXP・IE5.0〜6.0
使用言語:ASP.NET・C#・javascript

入力内容を更新する画面で、
放置していてもセッションがきれないようにする為、
今は定期的にjavascriptからiframeにポストバックしています。

【ソース例】

/**
* セッション継続設定関数
*/
function StartKeepActive(strActiveSource)
{
m_strActiveSource = strActiveSource;
m_keep_active_timerid = setTimeout('KeepActive()', ALIVE_INTERVAL);
}


/**
* セッション継続関数
*/
function KeepActive()
{
document.ActiveForm.REQ_ACTIVE_SOURCE.value = m_strActiveSource;
document.ActiveForm.target = "ActiveIFrame";
document.ActiveForm.action = "KeepSessionForm.aspx";
document.ActiveForm.submit();

//セッションタイムアウトしないため、定期的にサーバに接続する。
m_keep_active_timerid = setTimeout('KeepActive()', ALIVE_INTERVAL);
}

/**
* セッション継続クリア関数
*/
function ClearKeepActive()
{
if(m_keep_active_timerid > 0) clearTimeout(m_keep_active_timerid);
}



<iframe id="ActiveIFrame" name="ActiveIFrame" style="Z-INDEX: 103; LEFT: 0px; WIDTH: 0px; POSITION: absolute; TOP: 0px; HEIGHT: 0px" 
src="" scrolling="no"></iframe>
<form name="ActiveForm" method="post">
<input id="REQ_ACTIVE_SOURCE" type="hidden" name="REQ_ACTIVE_SOURCE"/>
</form>



こんな感じです。

しかし、これだとjavascriptのalertを表示し続けるとハートビートできずにセッションタイムアウトを起こしてしまいます。
何かセッションをキープする方法はありますでしょうか?


引用返信 編集キー/
■5881 / inTopicNo.2)  Re[1]: ASP.NET セッション ハートビート
□投稿者/ 黒龍 (86回)-(2007/07/25(Wed) 12:38:39)
セッションを永続化することでいかがでしょうか?
引用返信 編集キー/
■5882 / inTopicNo.3)  Re[1]: ASP.NET セッション ハートビート
□投稿者/ れい (23回)-(2007/07/25(Wed) 12:39:24)
No5878 (たろ さん) に返信
> 開発環境:windowsXP・IE5.0〜6.0
> 使用言語:ASP.NET・C#・javascript
> 何かセッションをキープする方法はありますでしょうか?

セッションを永遠にキープされると
サーバーが困ってしまうでしょう。

本来、接続しているかどうかは
HTTPより上のレベルでは意識してはいけないわけですし。

タイムアウトを長くするのではだめですか?

引用返信 編集キー/
■5883 / inTopicNo.4)  Re[2]: ASP.NET セッション ハートビート
□投稿者/ たろ (2回)-(2007/07/25(Wed) 12:42:18)
No5881 (黒龍 さん) に返信
> セッションを永続化することでいかがでしょうか?

ご返答ありがとうございます。

申し訳ありません。説明が不足していました。

この画面(フレーム)を表示している場合のみセッションをきれないようにしたいのです。
画面(フレーム)ごとに永続化することって可能でしょうか?

引用返信 編集キー/
■5884 / inTopicNo.5)  Re[2]: ASP.NET セッション ハートビート
□投稿者/ たろ (3回)-(2007/07/25(Wed) 12:45:02)
No5882 (れい さん) に返信
> ■No5878 (たろ さん) に返信
>>開発環境:windowsXP・IE5.0〜6.0
>>使用言語:ASP.NET・C#・javascript
>>何かセッションをキープする方法はありますでしょうか?
>
> セッションを永遠にキープされると
> サーバーが困ってしまうでしょう。
>
> 本来、接続しているかどうかは
> HTTPより上のレベルでは意識してはいけないわけですし。
>
> タイムアウトを長くするのではだめですか?
>

ご返答ありがとうございます。

他の画面(フレーム)を表示した場合には、設定した時間でセッションタイムアウトさせたいので、
タイムアウトを長くするのは最終手段だと考えております。


引用返信 編集キー/
■5886 / inTopicNo.6)  Re[1]: ASP.NET セッション ハートビート
□投稿者/ 魔界の仮面弁士 (364回)-(2007/07/25(Wed) 12:58:17)
No5878 (たろ さん) に返信
> しかし、これだとjavascriptのalertを表示し続けるとハートビートできずにセッションタイムアウトを起こしてしまいます。

alert を使わないよう修正するとか。。。
引用返信 編集キー/
■5888 / inTopicNo.7)  Re[2]: ASP.NET セッション ハートビート
□投稿者/ たろ (4回)-(2007/07/25(Wed) 13:06:44)
No5886 (魔界の仮面弁士 さん) に返信
> ■No5878 (たろ さん) に返信
>>しかし、これだとjavascriptのalertを表示し続けるとハートビートできずにセッションタイムアウトを起こしてしまいます。
>
> alert を使わないよう修正するとか。。。

ご返答ありがとうございます。

alertやconfirmはいたるところに使用しているので、
その修正も最終手段と考えております。

やっぱり、別ウィンドウでハートビートを行う方法しかないですかね?
その場合、見た目は別ウィンドウを開いているのがわからないようにする事とかできるんでしょうか?
引用返信 編集キー/
■5889 / inTopicNo.8)  Re[3]: ASP.NET セッション ハートビート
□投稿者/ 黒龍 (87回)-(2007/07/25(Wed) 13:13:20)
わからないようには出来ないと思います。ハートビートも接続台数によりますがサーバから見るとDOSに近いものがありますので避けたほうが賢明ですが既にハートビートをやる方向で修正をあまりいれずとなると別Windowが現実的かもしれませんね。
引用返信 編集キー/
■5890 / inTopicNo.9)  Re[1]: ASP.NET セッション ハートビート
□投稿者/ mあ (31回)-(2007/07/25(Wed) 13:17:42)
2007/07/25(Wed) 13:30:04 編集(投稿者)
2007/07/25(Wed) 13:28:57 編集(投稿者)
2007/07/25(Wed) 13:25:11 編集(投稿者)

No5878 (たろ さん) に返信
> 【ソース例】
(Snip)
> こんな感じです。
>
> しかし、これだとjavascriptのalertを表示し続けるとハートビートできずにセッションタイムアウトを起こしてしまいます。
> 何かセッションをキープする方法はありますでしょうか?

alert() を表示するとユーザーアクションが無いとバックグランド作業がとまってしまうからですよね。

# 訂正(1)
# なるほど、alert() を一杯いろんなとこで使っているのですか。
# ふーむ。。。IE オンリーなら、showModelessDialog で alert メッセージダイアログや
# confirm を上書きしてしまうのはどーですかね?

# 試してないので自身ないですが、
# window.alert = function(msgNo) {
# showModelessDialog("alert.html?msgNo="+ msgNo);
# }
#
# とか出来るかもしれませんね。モーダルではないので、親画面と並列動作できます。
#
# 訂正(2)
#<script>
#window.alert = function() {
# alert(" あらーとの上書き ");
#}
#window.confirm = function() {
#
# alert(" こんふぁーむのうわがき ");
#
#}
#confirm("ok");
#</script>
#
# 標準実装のメソッドはさすがに無理でした・・・
#

以下動く保証なしですm(__)m
<iframe id="frame1" width=0 height=0></iframe>
<script>
//30 秒毎にセッション継続ライフビートを送信、受け取ったら忍者ツールみたいに画面隅っこ
//にぼんやり表示(表示は5秒後にフェードアウト)。
var saID = null;
(function() {
saID = setTimeout(function() {
var o = document.getElementById("frame1");
o.onreadystatechange = function() {
if (this.readyState == 4) {
showKeepAlive();
}
}
o.src = "KeepSessionForm.aspx";
}, 30000 );
})();
function showKeepAlive() {
var o = document.getElementById("KEEP_ALIVE_MESSAGE");
o.style.visibility = "visible";
o.style.filter = "alpha(opacity=100)";
var opac = 100;
setTimeout(function() {
opac -= 5;
if (opac > 0) {
o.style.filter = "alpha(opacity=" + opac + ")";
setTimeout(arguments.callee, 100);
}

}, 5000); //5 秒後に 2秒掛けてフェードアウト
}
</script>
<style>
.KEEP_ALIVE_MESSAGE {
position:absolute;
left:0;
top:0;
width:150px;
height:12px;
color:red;
background-color:snow;
font-size:10px;
font-weight:bolder;
font-family:Arial Nallow;
}
</style>
<div id="LEEP_ALIVE_MESSAGE">KEEP ALIVE</div>

## ぜんぜん役に立たないレスでした。


引用返信 編集キー/
■5891 / inTopicNo.10)  Re[4]: ASP.NET セッション ハートビート
□投稿者/ たろ (5回)-(2007/07/25(Wed) 13:43:17)
No5889 (黒龍 さん) に返信
> わからないようには出来ないと思います。ハートビートも接続台数によりますがサーバから見るとDOSに近いものがありますので避けたほうが賢明ですが既にハートビートをやる方向で修正をあまりいれずとなると別Windowが現実的かもしれませんね。


ご返答ありがとうございます。

出来ないですよねぇ・・・。

やっぱり別ウィンドウしかないですかねぇ〜。。
引用返信 編集キー/
■5892 / inTopicNo.11)  Re[2]: ASP.NET セッション ハートビート
□投稿者/ たろ (6回)-(2007/07/25(Wed) 13:46:51)
ご返答ありがとうございます。


No5890 (mあ さん) に返信
> 2007/07/25(Wed) 13:30:04 編集(投稿者)
> 2007/07/25(Wed) 13:28:57 編集(投稿者)
> 2007/07/25(Wed) 13:25:11 編集(投稿者)
>
> ■No5878 (たろ さん) に返信
>>【ソース例】
> (Snip)
>>こんな感じです。
>>
>>しかし、これだとjavascriptのalertを表示し続けるとハートビートできずにセッションタイムアウトを起こしてしまいます。
>>何かセッションをキープする方法はありますでしょうか?
>
> alert() を表示するとユーザーアクションが無いとバックグランド作業がとまってしまうからですよね。
>

その通りです。


> # 訂正(1)
> # なるほど、alert() を一杯いろんなとこで使っているのですか。
> # ふーむ。。。IE オンリーなら、showModelessDialog で alert メッセージダイアログや
> # confirm を上書きしてしまうのはどーですかね?
>
> # 試してないので自身ないですが、
> # window.alert = function(msgNo) {
> # showModelessDialog("alert.html?msgNo="+ msgNo);
> # }
> #
> # とか出来るかもしれませんね。モーダルではないので、親画面と並列動作できます。
> #
> # 訂正(2)
> #<script>
> #window.alert = function() {
> # alert(" あらーとの上書き ");
> #}
> #window.confirm = function() {
> #
> # alert(" こんふぁーむのうわがき ");
> #
> #}
> #confirm("ok");
> #</script>
> #
> # 標準実装のメソッドはさすがに無理でした・・・
> #

既に、お客様先で稼動しているシステムなので、メッセージボックス等の見た目はあまり変えられないのです。
showModelessDialogを使用するとしたら、これも最終手段と考えております。


>
> 以下動く保証なしですm(__)m
> <iframe id="frame1" width=0 height=0></iframe>
> <script>
> //30 秒毎にセッション継続ライフビートを送信、受け取ったら忍者ツールみたいに画面隅っこ
> //にぼんやり表示(表示は5秒後にフェードアウト)。
> var saID = null;
> (function() {
> saID = setTimeout(function() {
> var o = document.getElementById("frame1");
> o.onreadystatechange = function() {
> if (this.readyState == 4) {
> showKeepAlive();
> }
> }
> o.src = "KeepSessionForm.aspx";
> }, 30000 );
> })();
> function showKeepAlive() {
> var o = document.getElementById("KEEP_ALIVE_MESSAGE");
> o.style.visibility = "visible";
> o.style.filter = "alpha(opacity=100)";
> var opac = 100;
> setTimeout(function() {
> opac -= 5;
> if (opac > 0) {
> o.style.filter = "alpha(opacity=" + opac + ")";
> setTimeout(arguments.callee, 100);
> }
>
> }, 5000); //5 秒後に 2秒掛けてフェードアウト
> }
> </script>
> <style>
> .KEEP_ALIVE_MESSAGE {
> position:absolute;
> left:0;
> top:0;
> width:150px;
> height:12px;
> color:red;
> background-color:snow;
> font-size:10px;
> font-weight:bolder;
> font-family:Arial Nallow;
> }
> </style>
> <div id="LEEP_ALIVE_MESSAGE">KEEP ALIVE</div>
>
> ## ぜんぜん役に立たないレスでした。
>

いいえ。そんなことないですよ。
色々考えていただきありがとうございました!

>
引用返信 編集キー/
■5894 / inTopicNo.12)  Re[3]: ASP.NET セッション ハートビート
□投稿者/ 中博俊 (1134回)-(2007/07/25(Wed) 14:23:34)
中博俊 さんの Web サイト
本番環境なんだから、セッションモードがInProcってことはあリえないでしょ?
StateServerなら仕方ないとして、SQLServerなり、カスタムなりならセッションタイムアウト時間をのばすデメリットなんてほとんどないわけだから別にかまわないじゃないですか。
引用返信 編集キー/
■5895 / inTopicNo.13)  Re[4]: ASP.NET セッション ハートビート
□投稿者/ たろ (7回)-(2007/07/25(Wed) 14:37:19)
No5894 (中博俊 さん) に返信
> 本番環境なんだから、セッションモードがInProcってことはあリえないでしょ?
> StateServerなら仕方ないとして、SQLServerなり、カスタムなりならセッションタイムアウト時間をのばすデメリットなんてほとんどないわけだから別にかまわないじゃないですか。

ご返答ありがとうございます。

そうなんですよ!
システム的には問題ないんですよ。

でも、お客様曰く、何日も登録中の画面を放置する人がいるらしいのです。
なので、セッションタイムをどこまで設定すれば問題ないのか分かりかねるらしいです・・。
引用返信 編集キー/
■5896 / inTopicNo.14)  Re[3]: ASP.NET セッション ハートビート
□投稿者/ mあ (32回)-(2007/07/25(Wed) 14:40:39)
別画面ですが、利点は、
 (1)タスクバーに出ないこと
 (2)親画面の制御(リロード)で勝手に閉じること
です。

[test01.html]
<html>
<script>
var win =showModelessDialog("test02.html",window,
   "dialogWidth:200px;dialogHeight:100px;");

window.onload = function() {
	win.moveTo(-100,-100);
}
</script>
<body bgcolor=snow>
ああああ<input type=button value="alert" onclick="alert('ok')">
いいいい<input type=button value="alert" onclick="confirm('ok?')">
<input type=text id="text1">
</body>

</html>

[test02.html]
<html>
<script>
function documentLoad() {

	setTimeout(function() {
		var pWin = dialogArguments;
		pWin.document.getElementById("text1").value = 
			(new Date()).getTime();
		setTimeout(arguments.callee, 1000);
	}, 1000);

}

window.onload = documentLoad;
</script>
<body bgcolor=snow>
<input type=text id="text1">
</body>

</html>


これでいいんじゃないすかね?コピペでお試しください。
ただ、showModelessDialog 内ではフォームポスト出来たよーな出来ないよーな
記憶が定かではありません。出来ないときは、Ajax で。出来るとしても条件あ
るでしょうから、念のために ダイアログ内で IFRAME を使うと良いかもしれま
せんね。



引用返信 編集キー/
■5897 / inTopicNo.15)  Re[4]: ASP.NET セッション ハートビート
□投稿者/ たろ (8回)-(2007/07/25(Wed) 15:14:28)
No5896 (mあ さん) に返信
>
> 別画面ですが、利点は、
>  (1)タスクバーに出ないこと
>  (2)親画面の制御(リロード)で勝手に閉じること
> です。
>
> [test01.html]
> <html>
> <script>
> var win =showModelessDialog("test02.html",window,
>    "dialogWidth:200px;dialogHeight:100px;");
>
> window.onload = function() {
> win.moveTo(-100,-100);
> }
> </script>
> <body bgcolor=snow>
> ああああ<input type=button value="alert" onclick="alert('ok')">
> いいいい<input type=button value="alert" onclick="confirm('ok?')">
> <input type=text id="text1">
> </body>
>
> </html>
>
> [test02.html]
> <html>
> <script>
> function documentLoad() {
>
> setTimeout(function() {
> var pWin = dialogArguments;
> pWin.document.getElementById("text1").value =
> (new Date()).getTime();
> setTimeout(arguments.callee, 1000);
> }, 1000);
>
> }
>
> window.onload = documentLoad;
> </script>
> <body bgcolor=snow>
> <input type=text id="text1">
> </body>
>
> </html>
>
>
> これでいいんじゃないすかね?コピペでお試しください。
> ただ、showModelessDialog 内ではフォームポスト出来たよーな出来ないよーな
> 記憶が定かではありません。出来ないときは、Ajax で。出来るとしても条件あ
> るでしょうから、念のために ダイアログ内で IFRAME を使うと良いかもしれま
> せんね。
>
>
>

ご回答ありがとうございます。


これは、showModelessDialogを使用して別画面でセッションのハートビートを行うということですよね。
別画面でOKが出ましたら、是非、参考にさせて頂きますね。

やっぱり別画面しかないですよね・・・。

引用返信 編集キー/
■5901 / inTopicNo.16)  Re[5]: ASP.NET セッション ハートビート
□投稿者/ れい (24回)-(2007/07/25(Wed) 17:25:54)
No5895 (たろ さん) に返信
> ■No5894 (中博俊 さん) に返信
>>本番環境なんだから、セッションモードがInProcってことはあリえないでしょ?
>>StateServerなら仕方ないとして、SQLServerなり、カスタムなりならセッションタイムアウト時間をのばすデメリットなんてほとんどないわけだから別にかまわないじゃないですか。
>
> でも、お客様曰く、何日も登録中の画面を放置する人がいるらしいのです。
> なので、セッションタイムをどこまで設定すれば問題ないのか分かりかねるらしいです・・。

それは、ユーザーがダメなんですね。
そもそも仕事は1日ごとに終わるので、
出社時に開いて退社時に閉じるようにすることぐらいできませんか?
MSとかIISのシステムのせいにしたり
セキュリティが弱くなる、流出したら責任とってくれますかとか言って
1日が限界ですとか言ってごまかしたりとか。

って処世術掲示板じゃないやここ。

まぁ実際のところ、
・サーバーの能力と負荷
・経路の安全性と扱う情報の重要度
によっては1日でも2日でも1週間でも、問題ないことも多いと思いますが。

1ヶ月だとアップデートがくるからやばいかな。

引用返信 編集キー/
■5902 / inTopicNo.17)  Re[6]: ASP.NET セッション ハートビート
□投稿者/ たろ (9回)-(2007/07/25(Wed) 17:41:58)

ご回答ありがとうございます。

No5901 (れい さん) に返信
> ■No5895 (たろ さん) に返信
>>■No5894 (中博俊 さん) に返信
> >>本番環境なんだから、セッションモードがInProcってことはあリえないでしょ?
> >>StateServerなら仕方ないとして、SQLServerなり、カスタムなりならセッションタイムアウト時間をのばすデメリットなんてほとんどないわけだから別にかまわないじゃないですか。
>>
>>でも、お客様曰く、何日も登録中の画面を放置する人がいるらしいのです。
>>なので、セッションタイムをどこまで設定すれば問題ないのか分かりかねるらしいです・・。
>
> それは、ユーザーがダメなんですね。

そうなんです!

> そもそも仕事は1日ごとに終わるので、
> 出社時に開いて退社時に閉じるようにすることぐらいできませんか?
> MSとかIISのシステムのせいにしたり
> セキュリティが弱くなる、流出したら責任とってくれますかとか言って
> 1日が限界ですとか言ってごまかしたりとか。
>
> って処世術掲示板じゃないやここ。
>

直接、エンドユーザーに会えればいいんですが、
取引先にサポートで参画しているので、
会えないし、言えないんです・・(TへT)

> まぁ実際のところ、
> ・サーバーの能力と負荷
> ・経路の安全性と扱う情報の重要度
> によっては1日でも2日でも1週間でも、問題ないことも多いと思いますが。
>
> 1ヶ月だとアップデートがくるからやばいかな。
>

もう、最終的にはメッセージぐらい閉じろって言ってもらいます。。





引用返信 編集キー/
■5903 / inTopicNo.18)  Re[7]: ASP.NET セッション ハートビート
□投稿者/ れい (25回)-(2007/07/25(Wed) 18:15:04)
No5902 (たろ さん) に返信
> ■No5901 (れい さん) に返信
>>■No5895 (たろ さん) に返信
> >>■No5894 (中博俊 さん) に返信
>>>>本番環境なんだから、セッションモードがInProcってことはあリえないでしょ?
>>>>StateServerなら仕方ないとして、SQLServerなり、カスタムなりならセッションタイムアウト時間をのばすデメリットなんてほとんどないわけだから別にかまわないじゃないですか。
> >>でも、お客様曰く、何日も登録中の画面を放置する人がいるらしいのです。
> >>なので、セッションタイムをどこまで設定すれば問題ないのか分かりかねるらしいです・・。
>>それは、ユーザーがダメなんですね。
> そうなんです!

できないものはできないし、
できたとしてもシステムとして無理がある場合、後々尾を引きます。
つぎはぎだらけのアプリは見たくありません。

そのダメなユーザーになんとか納得してもらうのも
技術者の務めではないですかね?
直接会えなくても、なんとかする方法はないですかね?

タイムアウトまでの時間を表示するとか、
早く入力できるように変更するとか、
登録中の画面を放置したくなくなるような仕掛けを用意するとか。

引用返信 編集キー/
■5904 / inTopicNo.19)  Re[8]: ASP.NET セッション ハートビート
□投稿者/ Jitta (379回)-(2007/07/25(Wed) 18:46:10)
サポートの元請けに掛け合って納得させる。エンドユーザーを納得させるのは元請けの仕事でしょう。
これが今できるベストかと。
引用返信 編集キー/
■5905 / inTopicNo.20)  Re[9]: ASP.NET セッション ハートビート
 
□投稿者/ ぼのぼの (63回)-(2007/07/25(Wed) 19:51:43)
かなり邪道ですが、frameなりiframeで「見えない画面」をつくり、
そっちでハートビートさせる、という方法でひょっとしたら望む動きはできるかも。

Sessionを継続させるだけなら当該画面をPostbackさせる必要はなく、
同アプリケーション内の任意のaspxにPostbackさせれば良いので、
ハートビート専用のaspxをつくっておき、0,100%のframeかCSSで非表示にしたiframe内で実行させれば…

知識ある人がソース見たらなんじゃこの怪しげなのは、ってなるかもしれませんがw
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -