トップ回答者
visual web developer 2010 expressでカウントダウンタイマーをつくるには?

質問
-
Windows xp professional を使用しています。
30分間経過したら自動的にログアウトするようにしたいと思っています。それで、ページの上の方に、「残り○○分○○秒でログアウトします」というカウントダウンをつけたいと思っています。
Visual Basic 2010 Expressでカウントダウンをつくることはできたですが、visual web developer 2010 expressでカウントダウンはつくれないでしょうか?
VB2010と同じようなコードを書いても(AjaxのTimerとScriptManagerをラベルの前に置いて)、29分59秒で止まったきり、ページは一秒毎に更新されてちかちかします。
一応、VB2010の場合のカウントダウンの作り方を下に載せておきます。Timer2は1000ミリ秒に設定されています。
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Static s As Integer = 1800
If s > 1 Then
s = s - 1
Label2.Text = "残り" & (s \ 60) & "分" & s - 60 * (s \ 60) & "秒です。"
Else
Timer2.Enabled = False
Label2.Hide()
End If
End Sub- 移動 佐伯玲 2013年2月8日 2:49 より適切なフォーラムへ
回答
-
30分間経過したら自動的にログアウトするようにしたいと思っています。それで、ページの上の方に、「残り○○分○○秒でログアウトします」というカウントダウンをつけたいと思っています。
IISにセッションタイムアウトがあることをご存じでしょうか? この時間を過ぎるとセッションが破棄されますので、自動的にログアウト状態になります(※)。ですから、佐祐理さんも書かれているように、javascriptを使ってクライアント側でこの時間のカウントダウンタイマーを実装するだけでも良いように思います。カウントダウンタイマーは、よくsetTimeout関数が使われており、ネット上で比較的簡単にサンプルを得ることができると思います。
(追記)
※ログインをセッションで管理している場合。ASP.NET標準の認証チケットでログイン管理をしている場合は、セッションIDとは別に管理されるので、セッション破棄=ログアウトにはなりません。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク firstlilac 2013年2月8日 3:38
- 編集済み trapemiyaModerator 2013年2月8日 7:37 追記
すべての返信
-
VB.NET で Windows アプリ用に作ったカウンタは Web アプリでは何の役にも立ちません。
Web アプリと Windows アプリの違いを理解されてないようですが、まずそのあたりから勉強する必要がありそうです。基本的な知識がないと、掲示板では話が通じません。
ログアウトとか書いてありますが、そもそも認証方式は何なのですか?
PS. 適切なフォーラムを選んでスレッドを立ててください。質問内容からすると、VB より ASP.NET の方が適切です。- 編集済み SurferOnWww 2013年2月7日 15:05 PS 追加
-
30分間経過したら自動的にログアウトするようにしたいと思っています。それで、ページの上の方に、「残り○○分○○秒でログアウトします」というカウントダウンをつけたいと思っています。
IISにセッションタイムアウトがあることをご存じでしょうか? この時間を過ぎるとセッションが破棄されますので、自動的にログアウト状態になります(※)。ですから、佐祐理さんも書かれているように、javascriptを使ってクライアント側でこの時間のカウントダウンタイマーを実装するだけでも良いように思います。カウントダウンタイマーは、よくsetTimeout関数が使われており、ネット上で比較的簡単にサンプルを得ることができると思います。
(追記)
※ログインをセッションで管理している場合。ASP.NET標準の認証チケットでログイン管理をしている場合は、セッションIDとは別に管理されるので、セッション破棄=ログアウトにはなりません。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク firstlilac 2013年2月8日 3:38
- 編集済み trapemiyaModerator 2013年2月8日 7:37 追記
-
こんにちは、firstlilac さん
フォーラムオペレータの佐伯 玲 です。現在「Visual Basic」のフォーラムへ投稿頂いておりますが、
Visual Web Developerでとのことなので「Visual Web Developer Express Edition」のカテゴリへ移動させて頂きますね。宜しくお願い致します。
__________________________
日本マイクロソフト株式会社 フォーラム オペレータ 佐伯 玲 -
ASP.NET の標準の仕組みでログインしている場合、セッションとログイン(認証チケット)は別に管理されるので、セッションタイムアウト=ログアウト、とはなりません。
小野様。フォローありがとうございます。
頭が完全にクラシックASPの方に行ってました。つまり、ログオン管理はセッションで行う方法です。ASP.NETはセッションIDを再利用するので、セッションを利用したログオン管理はお勧めではないようですね。私の前の投稿を修正させていただきました。(参考)
■[セキュリティ]ASP.NETのセッション固定対策
http://d.hatena.ne.jp/teracc/20100424★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
-
質問者さん的には解決したようですし、小野さんのレスとダブるところがありますが、せっかく書いたのでアップしておきます。
ASP.NET で「セッションタイムアウト」というと、一般的には sessionState 構成要素の timeout 属性に設定した時間が過ぎたことをいいますが、その意味では、「セッションタイムアウト」=「ログアウト」にはならないです。
セッション タイムアウトを構成する (IIS 7)
http://technet.microsoft.com/ja-jp/library/cc725820(v=ws.10).aspx質問者さんの使っている認証方式がわかりませんが、例えば Forms 認証の場合、ログアウトしている状態とは認証チケットを持っていない、もしくは認証チケットは持っていても期限切れという状態です。
Forms 認証チケットの有無もしくは期限切れと、セッションタイムアウトとは関係ないです。セッションがタイムアウトしていても認証チケットは有効と言うことは当然あります。その逆もあります。
また、SessionState 情報、SessionID、セッション Cookie のどれからも認証チケットに関する情報は取得できません。
Windows 認証、統合 Windows 認証の場合は、そもそも時間切れがありませんので、カウンタを設ける意味がありません。
ASP.NET 標準の Forms 認証で、あと何分何秒でログインの有効期限が過ぎるかを知るには、FormsAuthenticationTicket オブジェクトを取得して、認証チケットの有効期限を調べる他はないです。
期限切れまでの時間をブラウザに表示するには、ブラウザから要求を受けるたび認証チケットの有効期限を調べ、ClientScriptManager クラスを使って動的に JavaScript をページに追加するというような方法になると思います。
以下はオマケの情報:セッションタイムアウトすると保存されていた SessionState 情報は破棄されますが、SessionID は書き換えられず、同じ ID が使用され続けます。即ち、Session["xxxxx"] に保存したデータは破棄されても、ブラウザは要求のたび同じセッション Cookie を送り続けます。
また、SessionState 情報を格納しない場合(Session["Data"] = xxxx; というようなコードが存在しない場合)、サーバーはセッション Cookie を発行しません。
- 編集済み SurferOnWww 2013年2月8日 13:02 誤記訂正