none
visual web developer 2010 expressでカウントダウンタイマーをつくるには? RRS feed

  • 質問

  • 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 より適切なフォーラムへ
    2013年2月7日 8:32

回答

  • 30分間経過したら自動的にログアウトするようにしたいと思っています。それで、ページの上の方に、「残り○○分○○秒でログアウトします」というカウントダウンをつけたいと思っています。

    IISにセッションタイムアウトがあることをご存じでしょうか? この時間を過ぎるとセッションが破棄されますので、自動的にログアウト状態になります(※)。ですから、佐祐理さんも書かれているように、javascriptを使ってクライアント側でこの時間のカウントダウンタイマーを実装するだけでも良いように思います。カウントダウンタイマーは、よくsetTimeout関数が使われており、ネット上で比較的簡単にサンプルを得ることができると思います。

    (追記)
    ※ログインをセッションで管理している場合。ASP.NET標準の認証チケットでログイン管理をしている場合は、セッションIDとは別に管理されるので、セッション破棄=ログアウトにはなりません。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/


    2013年2月8日 1:39
    モデレータ

すべての返信

  • Static 変数が良くないのではないでしょうか。(Web アプリなので)
    Session 変数を利用しないとよろしくないと思います。
    「ASP.NET AJAX Timer countdown」などと検索すると、それらしいのがヒットします。(C# が多いですが、読めなくはないと思います。)
    2013年2月7日 9:23
  • 一般的には時間情報だけをブラウザーに送りカウントダウンそのものはJavaScriptで行います。そうしないと、毎秒ブラウザー⇔Webサーバーの通信が発生し負荷がかかり過ぎます。

    • 回答の候補に設定 佐祐理 2013年2月8日 3:50
    2013年2月7日 12:08
  • VB.NET で Windows アプリ用に作ったカウンタは Web アプリでは何の役にも立ちません。

    Web アプリと Windows アプリの違いを理解されてないようですが、まずそのあたりから勉強する必要がありそうです。基本的な知識がないと、掲示板では話が通じません。

    ログアウトとか書いてありますが、そもそも認証方式は何なのですか?


    PS. 適切なフォーラムを選んでスレッドを立ててください。質問内容からすると、VB より ASP.NET の方が適切です。
    • 編集済み SurferOnWww 2013年2月7日 15:05 PS 追加
    2013年2月7日 15:03
  • 30分間経過したら自動的にログアウトするようにしたいと思っています。それで、ページの上の方に、「残り○○分○○秒でログアウトします」というカウントダウンをつけたいと思っています。

    IISにセッションタイムアウトがあることをご存じでしょうか? この時間を過ぎるとセッションが破棄されますので、自動的にログアウト状態になります(※)。ですから、佐祐理さんも書かれているように、javascriptを使ってクライアント側でこの時間のカウントダウンタイマーを実装するだけでも良いように思います。カウントダウンタイマーは、よくsetTimeout関数が使われており、ネット上で比較的簡単にサンプルを得ることができると思います。

    (追記)
    ※ログインをセッションで管理している場合。ASP.NET標準の認証チケットでログイン管理をしている場合は、セッションIDとは別に管理されるので、セッション破棄=ログアウトにはなりません。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/


    2013年2月8日 1:39
    モデレータ
  • ありがとうございます。Javascriptが必要になるんですね。調べてみます。
    2013年2月8日 2:42
  • こんにちは、firstlilac さん
    フォーラムオペレータの佐伯 玲 です。

    現在「Visual Basic」のフォーラムへ投稿頂いておりますが、
    Visual Web Developerでとのことなので「Visual Web Developer Express Edition」のカテゴリへ移動させて頂きますね。

    宜しくお願い致します。
    __________________________
    日本マイクロソフト株式会社 フォーラム オペレータ 佐伯 玲

    2013年2月8日 2:47
  • すみません。そのカテゴリがあることに気がついていませんでした。Visial Web Developer Express Editionのことについては、これからはそちらで質問します。
    2013年2月8日 3:38
  • ASP.NET の標準の仕組みでログインしている場合、セッションとログイン(認証チケット)は別に管理されるので、セッションタイムアウト=ログアウト、とはなりません。
    この点、ちょっと注意が必要ですね。

    あおい情報システム株式会社 小野修司(どっとねっとふぁん)

    2013年2月8日 6:46
  • ASP.NET の標準の仕組みでログインしている場合、セッションとログイン(認証チケット)は別に管理されるので、セッションタイムアウト=ログアウト、とはなりません。

    小野様。フォローありがとうございます。
    頭が完全にクラシックASPの方に行ってました。つまり、ログオン管理はセッションで行う方法です。ASP.NETはセッションIDを再利用するので、セッションを利用したログオン管理はお勧めではないようですね。私の前の投稿を修正させていただきました。

    (参考)
    ■[セキュリティ]ASP.NETのセッション固定対策
    http://d.hatena.ne.jp/teracc/20100424


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2013年2月8日 7:30
    モデレータ
  • 質問者さん的には解決したようですし、小野さんのレスとダブるところがありますが、せっかく書いたのでアップしておきます。

    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 誤記訂正
    2013年2月8日 13:01