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

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

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

Re[5]: ASP.NET:Cookie機能の使い方


(過去ログ 68 を表示中)

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

■39471 / inTopicNo.1)  ASP.NET:Cookie機能の使い方
  
□投稿者/ Lisa (3回)-(2009/08/09(Sun) 10:27:29)

分類:[ASP.NET (VB)] 

何度もごめんなさい。
ASP.NETでCookie機能を使いたいのですが、うまく出来ません。
1.Cookie内容が更新できない。
2.Cookieを削除しても表示が消えない。
の2点なんです。間違ってる所を教えてください。

開発:VWD2005 VB
サーバ:ASP.NET2.0 + Ajax1.0

↓このページを参考に作ってます。
http://momotchi.net/forums/t/23.aspx

1.Cookie内容が更新できない。
Cookie内容を書き直して「クッキー更新」ボタンを押すとCookieの内容を更新できる様に
したいのですが、最初に設定したCookie内容が表示され更新されません。
2.Cookieを削除しても表示が消えない。
「クッキーの削除」ボタンを押しても、前のCookie内容が表示され消えてくれません。
IEの「更新」ボタンを押しても、前のCookie内容が表示されます。
IEを終了し再度IEを起動し、このプログラムを開くとちゃんとCookie内容は削除されてます。

【CookieTest.aspx】
<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim cookie As HttpCookie = Request.Cookies("UserInfo")
        If Not (cookie Is Nothing) Then
            TextBox1.Text = Server.UrlDecode(cookie.Values("name"))
            TextBox2.Text = Server.UrlDecode(cookie.Values("password"))
        End If
    End Sub
    
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim cookie As New HttpCookie("UserInfo")
        cookie.Values("name") = Server.UrlEncode(TextBox1.Text)
        cookie.Values("password") = Server.UrlEncode(TextBox2.Text)
        cookie.Expires = DateTime.Now.AddMonths(3)
        Response.Cookies.Add(cookie)
    End Sub

    Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim cookie As New HttpCookie("UserInfo")
        cookie.Expires = DateTime.Now.AddDays(-1D)
        Response.Cookies.Add(cookie)
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>無題のページ</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        クッキーの基本操作<br />
        名前:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
        パスワード:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="クッキー更新" />
        <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="クッキーの削除" /></div>
    </form>
</body>
</html>

よろしくお願いします。

引用返信 編集キー/
■39473 / inTopicNo.2)  Re[1]: ASP.NET:Cookie機能の使い方
□投稿者/ naoko (13回)-(2009/08/09(Sun) 12:13:21)
No39471 (Lisa さん) に返信

こんにちは。もしまだでしたらこちらをご覧になることをお勧めします。

ASP.NET Cookie
http://msdn.microsoft.com/ja-jp/library/ms178193(VS.80).aspx
引用返信 編集キー/
■39474 / inTopicNo.3)  Re[1]: ASP.NET:Cookie機能の使い方
□投稿者/ もりお (27回)-(2009/08/09(Sun) 12:42:48)
No39471 (Lisa さん) に返信

ボタン押下時のイベント発生の順番が問題なのではないかと思います。
ページロードイベントはボタンクリックイベントの前に発生します。

Page_Load
   クッキーを読み込んでテキストボックスにセット
  ↓
Button_Click
   テキストボックスの値をクッキーに保存
引用返信 編集キー/
■39476 / inTopicNo.4)  Re[2]: ASP.NET:Cookie機能の使い方
□投稿者/ Lisa (4回)-(2009/08/09(Sun) 14:48:31)
2009/08/09(Sun) 15:09:35 編集(投稿者)
2009/08/09(Sun) 15:09:11 編集(投稿者)

<pre><pre>■No39474 (もりお さん) に返信
もりお様、ありがとうございます。
Cookie情報の更新が出来る様になりました。
サーバでも動作確認出来ました。

もりお様 wrote
> ボタン押下時のイベント発生の順番が問題なのではないかと思います。
> ページロードイベントはボタンクリックイベントの前に発生します。

もりお様のヒントで、教科書としている「10日でおぼえるASP.NET2.0入門教室」の最初の方に
「ASP.NET式イベントドリブンモデルの落とし穴」としてこの事が書かれていた事を思い出し
ました。

以下の様に修正して、「クッキー更新」ボタンでCookie内容が更新出来る様になりました。
ありがとうございました。

'最初のPage_Loadの時だけ実行する処理
If Not Page.IsPostBack Then
    Dim cookie As HttpCookie = Request.Cookies("UserInfo")
    If Not (cookie Is Nothing) Then
        TextBox1.Text = Server.UrlDecode(cookie.Values("name"))
        TextBox2.Text = Server.UrlDecode(cookie.Values("password"))
    End If
End If


naoko様、アドバイスありがとうございます。
> こんにちは。もしまだでしたらこちらをご覧になることをお勧めします。
> 
> ASP.NET Cookie
> http://msdn.microsoft.com/ja-jp/library/ms178193(VS.80).aspx

マイクロソフト社が提供してくれているASP.NETの正式マニュアルですね。
ざっと目を通しましたが半分以上が何の説明をしているのか?チンプンカンプンです。
でもこれを理解しないと安全で安定したプログラムを書く事は出来ないんですよね。
がんばって理解出来る様に努力しようと思いますが・・・・

ひとつわかったのが、同じ動作をする表現で
Response.AppendCookie(cookie)と
Response.Cookies.Add(cookie)がありますが、
Response.Cookies.Add(cookie)の表現が最新の表現なんだな。とわかりました。
(合ってるかな?)

2.Cookieを削除しても表示が消えない。は解決出来てません。
引き続きアドバイスよろしくお願いします。</pre></pre>

引用返信 編集キー/
■39478 / inTopicNo.5)  Re[3]: ASP.NET:Cookie機能の使い方
□投稿者/ もりお (28回)-(2009/08/09(Sun) 18:37:31)
No39476 (Lisa さん) に返信
> 2.Cookieを削除しても表示が消えない。は解決出来てません。
そのように見えるだけかと思います。
読み込みボタンを設置して、削除ボタン押下後に
読み込みボタンを押して確認してみてくださいな。

Private Sub readCookie()
    If Not Page.IsPostBack Then
        Dim cookie As HttpCookie = Request.Cookies("UserInfo")
        If Not (cookie Is Nothing) Then
            TextBox1.Text = Server.UrlDecode(cookie.Values("name"))
            TextBox2.Text = Server.UrlDecode(cookie.Values("password"))
        Else
            TextBox1.Text = ""
            TextBox2.Text = ""
        End If
    End If
End Sub

Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    readCookie()
End Sub

引用返信 編集キー/
■39482 / inTopicNo.6)  Re[4]: ASP.NET:Cookie機能の使い方
□投稿者/ Lisa (6回)-(2009/08/09(Sun) 22:18:46)
No39478 (もりお さん) に返信
もりお様、何度もありがとうございます。
Cookie情報は正しく削除出来ていました。Cookieが削除出来ている事を確認出来る様になりました。
サーバでも動作確認出来ました。

もりお様のアドバイスをヒントに下記に示した「クッキーの読込」ボタンを作成し、
Cookieの状態を表示出来る様になりました。
これでどうにかCookie情報を操作出来る様になったと思います。ありがとうございました。

Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim cookie As HttpCookie = Request.Cookies("UserInfo")
    If Not (cookie Is Nothing) Then
        TextBox1.Text = Server.UrlDecode(cookie.Values("name"))
        TextBox2.Text = Server.UrlDecode(cookie.Values("password"))
    Else
        TextBox1.Text = "なし"
        TextBox2.Text = "なし"
    End If
End Sub


<asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="クッキーの読込" />

解決済み
引用返信 編集キー/
■39701 / inTopicNo.7)  Re[1]: ASP.NET:Cookie機能の使い方
□投稿者/ Lisa (7回)-(2009/08/12(Wed) 15:07:37)
ASP.NET勉強の例題としてアクセスカウンタを作ってます。
ですが、Cookie情報がなかった場合の処理のcok.Values("cokcount") = countの行で
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」のエラー
が発生し動きません。
どこが問題なんでしょうか?よろしくお願いします。

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        'ポストバック表示でない場合
        If Not Page.IsPostBack Then
            'アクセスカウンタ
            Dim sr As String = Server.MapPath("count.txt")
            Dim cokcount As String
            If System.IO.File.Exists(sr) Then
                'count.txtファイルが既に存在する場合
                'countデータの読込み
                Dim count As String = System.IO.File.ReadAllText(sr)
                'Cookieハンドルの定義
                Dim cok As HttpCookie = Request.Cookies("CokCheck")
                
                If Not (cok Is Nothing) Then
                    'Cookie情報がある場合
                    cokcount = cok.Values("cokcount")
                    If cokcount <> count Then
                        'ページが再表示でなかった場合
                        count += 1
                        Label1.Text = count
                        System.IO.File.WriteAllText(sr, count)
                        cok.Values("cokcount") = count
                        cok.Expires = DateTime.Now.AddSeconds(60)
                        Response.Cookies.Add(cok)
                    End If
                Else
                    'Cookie情報がなかった場合
                    count += 1
                    Label1.Text = count
                    System.IO.File.WriteAllText(sr, count)
                    cok.Values("cokcount") = count '←ここで「オブジェクト参照がオブジェクト インスタンスに設定されていません。」のエラー
                    cok.Expires = DateTime.Now.AddSeconds(60)
                    Response.Cookies.Add(cok)
                End If
            Else
                'conut.txtファイルが存在しない場合
                'Cookieハンドルの定義
                Dim cok As HttpCookie = Request.Cookies("CokCheck")
                Dim count As String
                count = 1
                Label1.Text = count
                System.IO.File.WriteAllText(sr, count)
                cok.Values("cokcount") = count
                cok.Expires = DateTime.Now.AddSeconds(60)
                Response.Cookies.Add(cok)
            End If

        End If
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>無題のページ</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        アクセスカウンタ 09/08/12<br />
        <br />
        閲覧数:
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>
    </form>
</body>
</html>

引用返信 編集キー/
■39712 / inTopicNo.8)  Re[2]: ASP.NET:Cookie機能の使い方
□投稿者/ もりお (34回)-(2009/08/12(Wed) 16:30:53)
No39701 (Lisa さん) に返信
cok が Nothing なためです。
インスタンスをセットしてくださいな。

cok = New HttpCookie
引用返信 編集キー/
■39713 / inTopicNo.9)  Re[3]: ASP.NET:Cookie機能の使い方
□投稿者/ Lisa (9回)-(2009/08/12(Wed) 16:46:28)
No39712 (もりお さん) に返信
> ■No39701 (Lisa さん) に返信
> cok が Nothing なためです。
> インスタンスをセットしてくださいな。
> 
> cok = New HttpCookie

もりお様、いつも本当にありがとうございます。
Dim cok As New HttpCookie("CokCheck")の行を追加しましたが、こんどは「変数 'cok' 
は、それを囲むブロック内の変数を非表示にします。」のエラーが発生しビルド出来ません。
Cookieが全然理解できてないですね。

Else
    'Cookie情報がなかった場合
    Dim cok As New HttpCookie("CokCheck") '←ここで「変数 'cok' は、それを囲むブロック内の変数を非表示にします。」エラー
    count += 1
    Label1.Text = count
    System.IO.File.WriteAllText(sr, count)
    cok.Values("cokcount") = count
    cok.Expires = DateTime.Now.AddSeconds(60)
    Response.Cookies.Add(cok)
End If

引用返信 編集キー/
■39716 / inTopicNo.10)  Re[4]: ASP.NET:Cookie機能の使い方
□投稿者/ もりお (35回)-(2009/08/12(Wed) 17:04:39)
2009/08/12(Wed) 17:05:38 編集(投稿者)

No39713 (Lisa さん) に返信
> Dim cok As New HttpCookie("CokCheck")の行を追加しましたが、こんどは「変数 'cok'
> は、それを囲むブロック内の変数を非表示にします。」のエラーが発生しビルド出来ません。

同じ名前の変数は宣言できませんよーという意味のエラーです。


> 'Cookieハンドルの定義
> Dim cok As HttpCookie = Request.Cookies("CokCheck")

ここのところで cok の変数がすでに宣言されているのでエラーが出るわけです。
新規に変数を宣言するんで無くて、インスタンスをセットしてくださいな。
cok = New HttpCookie("CokCheck")
引用返信 編集キー/
■39722 / inTopicNo.11)  Re[5]: ASP.NET:Cookie機能の使い方
□投稿者/ Lisa (11回)-(2009/08/12(Wed) 18:21:41)
No39716 (もりお さん) に返信
> ここのところで cok の変数がすでに宣言されているのでエラーが出るわけです。
> 新規に変数を宣言するんで無くて、インスタンスをセットしてくださいな。
> cok = New HttpCookie("CokCheck")
もりお様、ありがとうございます。
ビルドでき、動く様になりました。
cookieの問題と言うより、オブジェクト指向プログラミングの基礎が理解できていない
という事ですね。勉強しなきゃならない事が山のようにありますね。

↓修正したコード
        Else
            'ページの再表示であった場合
            Label1.Text = count
            cok.Values("cokcount") = count
            'cok.Expires = DateTime.Now.AddHours(12)
            cok.Expires = DateTime.Now.AddSeconds(30)
            Response.Cookies.Add(cok)
        End If
    Else
        'Cookie情報がなかった場合
        'インスタンスをセット
        cok = New HttpCookie("CokCheck")
        count += 1
        Label1.Text = count
        System.IO.File.WriteAllText(sr, count)
        cok.Values("cokcount") = count
        'cok.Expires = DateTime.Now.AddHours(12)
        cok.Expires = DateTime.Now.AddSeconds(30)
        Response.Cookies.Add(cok)
    End If
Else
    'conut.txtファイルが存在しない場合
    'Cookieハンドルの定義
    Dim cok As HttpCookie = Request.Cookies("CokCheck")
    Dim count As String
    'インスタンスをセット
    cok = New HttpCookie("CokCheck")
    count = 1
    Label1.Text = count
    System.IO.File.WriteAllText(sr, count)
    cok.Values("cokcount") = count
    'cok.Expires = DateTime.Now.AddHours(12)
    cok.Expires = DateTime.Now.AddSeconds(30)
    Response.Cookies.Add(cok)
End If

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -