VB.net(ASP.net)でアクセスカウンターを作りたい(.net初心者)

このQ&Aのポイント
  • VB.NETのWebアプリケーションでアクセスカウンターを作りたいが、ブラウザの更新ボタンを押してもカウントしない方法がわからない。
  • クライアントの情報を保持しておき、クライアントが変化したらカウントを増やす方法や、セッションの切れた後に再びアクセスされたらカウントを増やす方法が知りたい。
  • 参考になるURLも教えてほしい。
回答を見る
  • ベストアンサー

VB.net(ASP.net)でアクセスカウンターを作りたい(.net初心者)

VB.NETのWebアプリケーションでアクセスカウンターを作りたいのですが、ページがアクセスされた時にDBの値を+1するまではできたのですが、ブラウザの更新ボタンを押したときにアクセスカウントを+1させたくないのですが、その技術がわかりません。(更新ボタンで+1させないようにCache("StartFlag") = "ON"して、対応している、がこれに問題がある) 今作っている処理は以下の通りです。 Private Sub Page_Load  If Not IsPostBack Then   カウンタを+1する処理   (ただしCache("StartFlag") がONなら+1しない) Cache("StartFlag") = "ON" End If End Sub   ですが Cache("StartFlag") が"ON"を保持したままになってしまうので、どこのPCからアクセスしてもカウンタが+1されません。 なにか良いアイデアはないでしょうか? 例えば 1)クライアントの情報を保持しておき、   クライアントが変化したら+1する (クライアントの情報の取得の仕方がわかりません) 2)Cache("StartFlag") をクライアント毎のセッション変数に変えて、セッションが切れて再びアクセスされたら+1する(やり方がわかりません) その他、参考になりそうなURLも教えていただきたいのですが、お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

2が妥当でしょう。 Cache("StartFlag") → Session("StartFlag")

lord_chan
質問者

補足

todo36さんいつもお世話様です。セッション変数って普通に使えたんですね。 で、つぎなる課題は、これだとブラウザを一度消して、また起動してここをアクセスすると、カウンタが+1されるのですが、それの拒否は無理なのですかね?CGIのアクセスカウンタなどは同じところからアクセスしたら時間がたたないとカウントが+1されないみたいな仕様になっていますよね、あれってどうやってるのでしょうか? ちなみに今作っているものは これ↓です http://fleamarket.dip.jp/alice/ あと話は変わりますが、アクセスしてきた人(PC)の情報って得られるのですかね?

その他の回答 (1)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

Cookie

lord_chan
質問者

補足

ええ!そんなぁ(; . ;)

関連するQ&A

  • VB初心者ですAccessを更新したいのですが

    VB初心者です、よろしくお願いします。 VBでAccessのレコードの一項目を更新したいのですが出来ません。 抽出条件からAccessのデータを持ってきた後、更新したいのですがどうすればいいのでしょうか? 因みに抽出条件までは変更できません、AddNew以降でお願いします。 VB6でAccess2003です。 エラーは現在のRecordsetは更新をサポートしておりませ。プロダイバーかロックタイプの限界の可能性があります。 Set rst = New ADODB.Recordset '処理をするテーブル指定 rst.Open "[**]", db, adOpenStatic, adLockOptimistic With rst .MoveFirst .Filter = "" criteria1 = "" criteria1 = "**= '" & Module1.** & "'" .Filter = criteria1 If .RecordCount = 0 Then MsgBox "は登録されていません" Else .Filter = "" criteria2 = "" criteria2 = "**= '" & Module1.** & "' " .Filter = criteria2 If .RecordCount = 0 Then MsgBox "登録されていません" Else .Filter = "" criteria3 = "" criteria3 = "**'" & Module1.** & "' " .Filter = criteria2 If .RecordCount = 0 Then MsgBox "登録されていません" Else Module1.** = rst.Fields("**") .AddNew .Fields("***") = Module1.** .Update End If End If End If End With

  • VB.NETのUsingキーワードの使い方

    毎々参考にさせていただいております。 早速ですが質問させていただきます。 あるフォームでボタンが押された時に、下記の3つの処理でログを出力したい場合なのですが。  a) ボタンが押されたイベント処理  b) ボタンが押されたイベント処理の中で呼ばれるTestFunction1の中  c) ボタンが押されたイベント処理の中で呼ばれるTestFunction2の中 複数のメソッドに参照されるということで、StreamWriterのオブジェクトはインスタンスフィールドに宣言しています。 Public Class Test   'StreamWriter型のフィールド宣言   Private _sw As System.IO.StreamWriter   'ボタンクリックイベント処理   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click     Me._sw = New System.IO.StreamWriter(filePath)     Using Me._sw       Me._sw.WriteLine("Button1はクリックされました")       Me.TestFunction1()       Me.TestFunction2()     End Using   End Sub   Private Sub TestFunction1()     'TODO:ここに処理     If Me._sw IsNot Nothing Then       Me._sw.WriteLine("TestFunction1は処理されました。")     End If   End Sub   Private Sub TestFunction2()     'TODO:ここに処理     If Me._sw IsNot Nothing Then       Me._sw.WriteLine("TestFunction2は処理されました。")     End If   End Sub End Class 目的とする処理は実現されているのですが、このようなUsingの使い方は問題ないのでしょうか? どなたかに御回答いただければうれしく思います。よろしくお願いいたします。 環境は下記のような感じです。  環境IDE:Visual Studio 2005  言語  :Visual Basic

  • アクセスカウンタについて

    HPを見ていて、更新ボタンを押す度に番号が増えると本来の人数よりどんどん増えてしまいますよね。 そこで、いったんHPを開いたら番号が増えないタイプのもありますよね。これは、何が違うのですか? 私のは、前者のカウンタですが、HPを分割して、左側にアクセスカウンタをつけて、その側は、常に表示し、右側のページを変更する形をとって運用しています。しかし、必ずしもそういう形をとる必要はないようなので、たずねています。

  • クッキーとアクセスカウンタ

    現在自分の個人サイトでFC2のアクセスカウンタを使用しているのですが、これはクッキーを設定していないと、閲覧者が更新ボタンを押すたびに1カウントされるのです。そのため、カウント数で遊んだり、荒らしたりする不届きものが現れ、対策として別のアクセスカウンタを設置しようと思っています。 なにかいいカウンタはないでしょうか? どうかよろしく御願いします。 ちなみに使用しているサーバはland.toでCGI PHPが設置できます。

  • エクセルマクロで開いているアクセスのファイルを知る

    エクセル2007です。今立ち上がっているファイルを、エクセルの表に書き出すマクロを作りたいです。 エクセル自身はいうまでもなく、ワード、パワーポイントまで成功しました。けど、アクセスだけがうまくいきません。パワーポイント用testはうまく動くのに、アクセス用testはだめなのです。 For Each アクセス文書 In アクセスアプリケーション.databases でこけるのです。どうも、「databases」 というところが間違っていると、目星をつけました。どう書いたらいいのか教えてください。いろいろ調べましたがわかりませんでした。 Sub パワーポイント用test() Dim パワーポイントアプリケーション As Object Dim パワーポイント文書 As Object Dim カウンター As Long カウンター = 1 Range("A2").Select On Error Resume Next Set パワーポイントアプリケーション = GetObject(, "PowerPoint.Application") On Error GoTo 0 If パワーポイントアプリケーション Is Nothing Then Exit Sub For Each パワーポイント文書 In パワーポイントアプリケーション.Presentations カウンター = カウンター + 1 Cells(カウンター, 1) = パワーポイント文書.Name Cells(カウンター, 2) = パワーポイント文書.FullName Next Set パワーポイントアプリケーション = Nothing End Sub Sub アクセス用test() Dim アクセスアプリケーション As Object Dim アクセス文書 As Object Dim カウンター As Long カウンター = 1 Range("A2").Select On Error Resume Next Set アクセスアプリケーション = GetObject(, "Access.Application") On Error GoTo 0 If アクセスアプリケーション Is Nothing Then Exit Sub For Each アクセス文書 In アクセスアプリケーション.databases カウンター = カウンター + 1 Cells(カウンター, 1) = アクセス文書.Name Cells(カウンター, 2) = アクセス文書.FullName Next Set パワーポイントアプリケーション = Nothing End Sub

  • 携帯でのカウンタ

    今Perlのみ(表示はHTML形式)で携帯用のサイトを作っています。トップページには自作のアクセスカウンターが置いてあります。携帯なので画像ではなく文字表示にしています。 index.cgi内にカウンター処理を記述しているのですが、困ったことに、普通に訪れたときはちゃんと1アクセスにつき「+1」されているのに、ページ更新(リロード)をすると「+2」をしてしまうのです。 どうやら、いったんページを読み込んだ後、再読み込みをしている風になっているのです。うまく説明できないのですが・・、ページ表示が完了すると、完了したはずなのに、もう一度画面下の「サブメニュー」とかがある部分が一瞬「接続中」になるのです。(その一瞬の間に再読み込み?)その再読み込みみたいなのが完了するまで、サブメニューの動作は行えなくなっています。 パソコンでは(カウンタは)ちゃんと動いてくれます。METAタグのキャッシュの部分に問題があるのかな?など考えたのですが、よく分からず何をどうすればいいのか分かりません。 稚拙な文章で申し訳ありません。どなたか分かる方返信お願いいたします。 ちなみに私はauのWINを使っています。

  • Accessフォームの作成

    Accessで作成されているシステムの ファイル取り込みフォームにある実行ボタンを押下すると、 下記のメッセージが表示されます。 「select case に対応する case がみつからない。」 どこかで指定しないといけないのでしょうか? Private Sub Cmd実行_Click() On Error GoTo Err Dim StrSql As String Dim IntNDCnt As Integer Dim IntNTCnt As Integer '確認メッセージの出力 If MsgBox("処理を開始します。よろしいですか?", vbInformation + vbYesNo, "データ取込処理") = vbNo Then Exit Sub End If '対象データ別の処理実行 Select Case Me.Cmb対象.ListIndex Case -1 'エラー MsgBox "読込むデータを指定してください", vbCritical, "データ取込処理" Exit Sub Case 0 '全データ If F_手数料明細読込() = False Then Exit Sub End If If F_奨励金読込() = False Then Exit Sub End If If F_減額読込() = False Then Exit Sub End If If F_預り金読込() = False Then Exit Sub End If Case 1 '手数料データ If F_手数料明細読込() = False Then Exit Sub End If Case 2 '奨励金データ If F_奨励金読込() = False Then Exit Sub End If Case 3 '減額データ If F_減額読込() = False Then Exit Sub Case 4 '預り金データ If F_預り金読込() = False Then Exit Sub End If End Select 今は、Case 4が黄色に反転します。

  • Accessフォームのボタンの二度押し禁止

    Access2000において、長い処理をさせる時、 ボタンを押した後に再びボタンを押してしまい処理が走ってしまうのを防ぐため、 以下のようなコードを考えましたが、エラーが発生します。 (以下のコードは簡略化しています) Private Sub cmd売上伝票変更_Click()   strMsg = MsgBox("更新します。よろしいですか?", vbYesNo)   If strMsg = vbNo Then     MsgBox "中止しました。", vbOKOnly     Exit Sub   End If   'ボタンを無効にしようとしましたがここでエラー   Me.cmd売上伝票変更.Enabled = False   Do Until 条件     ~ここに処理が入る~     'ステータスバーに進捗状況表示     Application.SysCmd acSysCmdSetStatus, lngCount & "件 / " & lngTotal & "件 完了"     DoEvents   Loop End Sub 進捗状況をステータスバーに表示させるために、DoEventsを入れていますが、 これがモトで再びボタンが押せてしまいます。 入れない場合、どこかクリックするだけで画面がフリーズしたようになってしまいます。 ボタンを押せなくする方法、またはボタンを押した後、画面だけ更新できる方法で、 何かよい方法は無いでしょうか?

  • VB.NET2010 Timerの使用

    こんにちは、冬の猫と申します。 VB.NET2010にて、教えて頂きたく投稿します。 現在作成中のプログラムの簡易仕様は、 (1)フォーム上に複数のボタンが配置されている。 (2)ボタンの上にマウスを載ったタイミングで0.5秒カウントする。 (3)0.5秒のカウントが終わるまでマウスがボタンの上にあれば、ボタンのサイズを大きくする。 (4)ボタンの上からマウスがなくなれば、ボタンを元のサイズに戻す。 という形になっているのですが(3)の実装がうまくいきません。 以下にソースコードを貼り付けます。 Public Class Form1 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 'ボタンのサイズ共通化処理 Dim o As Control For Each o In Me.Controls If o.GetType Is GetType(Button) Then o.Size = New Size(50, 50) End If Next For Each ctl As Control In Me.Controls If TypeOf ctl Is Button Then AddHandler CType(ctl, Button).MouseEnter, AddressOf Button_MouseEnter End If Next For Each ctl2 As Control In Me.Controls If TypeOf ctl2 Is Button Then AddHandler CType(ctl2, Button).MouseLeave, AddressOf Button_MouseLeave End If Next End Sub Private Sub Button_MouseEnter(sender As System.Object, e As System.EventArgs) 'マウスが乗った時 'ボタンの取得 Dim btn As Button = CType(sender, Button) btn.Size = New size(100, 100) End Sub Private Sub Button_MouseLeave(sender As System.Object, e As System.EventArgs) 'マウスが離れた時 'ボタンの取得 Dim btn As Button = CType(sender, Button) btn.Size = New Size(50, 50) End Sub End Class 細かい処理は割愛していますが、大まかにはこの様な処理を作成しました。 インターネットからのコピーアンドペーストもあるので、少し不細工な形になっています。 これに、タイマーイベントを実装したいのですが ボタンの上にマウスが乗った際に、タイマーをスタートさせて 該当するボタンのオブジェクトを取得できず困っております。 ご教授のほど、よろしくお願いします。

  • アクセスカウンタでリロード時のカウントされるのをやめたい!

    自分のPCでIIS5.0をインストールして CGIの作成練習をしています。 簡単なアクセスカウンタを作ったのですが、 どっかのをコピーしただけ。。。 sub counter{ #(読込み) open (IN,"<./count.dat"); $raikyaku = <IN>; close (IN); $raikyaku++; #(書き込み) open (OUT,">./count.dat"); print OUT $raikyaku; close (OUT); } これを、更新ボタンを押した時にカウントされない ようにしたいです。 また、BBSに埋め込もうと思っているので、 投稿ボタンで再表示された場合も カウントされてほしくありません。

専門家に質問してみよう