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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.39471 の関連記事表示

<< 0 >>
■39471  ASP.NET:Cookie機能の使い方
□投稿者/ Lisa -(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>

    よろしくお願いします。
親記事 /過去ログ68より / 関連記事表示
削除チェック/

■39473  Re[1]: ASP.NET:Cookie機能の使い方
□投稿者/ naoko -(2009/08/09(Sun) 12:13:21)
記事No.39471 のレス /過去ログ68より / 関連記事表示
削除チェック/

■39474  Re[1]: ASP.NET:Cookie機能の使い方
□投稿者/ もりお -(2009/08/09(Sun) 12:42:48)
    No39471 (Lisa さん) に返信

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

    Page_Load
       クッキーを読み込んでテキストボックスにセット
      ↓
    Button_Click
       テキストボックスの値をクッキーに保存
記事No.39471 のレス /過去ログ68より / 関連記事表示
削除チェック/

■39476  Re[2]: ASP.NET:Cookie機能の使い方
□投稿者/ Lisa -(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>
記事No.39471 のレス /過去ログ68より / 関連記事表示
削除チェック/

■39478  Re[3]: ASP.NET:Cookie機能の使い方
□投稿者/ もりお -(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
記事No.39471 のレス /過去ログ68より / 関連記事表示
削除チェック/

■39482  Re[4]: ASP.NET:Cookie機能の使い方
□投稿者/ Lisa -(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="クッキーの読込" />
記事No.39471 のレス / END /過去ログ68より / 関連記事表示
削除チェック/

■39701  Re[1]: ASP.NET:Cookie機能の使い方
□投稿者/ Lisa -(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>
記事No.39471 のレス /過去ログ68より / 関連記事表示
削除チェック/

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

    cok = New HttpCookie
記事No.39471 のレス /過去ログ68より / 関連記事表示
削除チェック/

■39713  Re[3]: ASP.NET:Cookie機能の使い方
□投稿者/ Lisa -(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
記事No.39471 のレス /過去ログ68より / 関連記事表示
削除チェック/

■39716  Re[4]: ASP.NET:Cookie機能の使い方
□投稿者/ もりお -(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")
記事No.39471 のレス /過去ログ68より / 関連記事表示
削除チェック/

■39722  Re[5]: ASP.NET:Cookie機能の使い方
□投稿者/ Lisa -(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
記事No.39471 のレス / END /過去ログ68より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -