5

ライブ サイトでエラーが発生しますが、これは開発環境では表示されず、Chrome でのみ発生するようです。これに対する解決策を少し調べてみたところ、Auth cookie にのみ問題が見つかりました。(私は過去に chrome と auth cookie について問題を提起しました) が、これは違います。

ユーザーのカートを Cookie に保存します。私はクッキーをそのように設定しました

HttpCookie responseCookie = HttpContext.Response.Cookies[CartHelper.CART];
responseCookie.PackCartCookie(vm.Cart);

拡張メソッド PackCartCookie が Cookie 値を次のように設定する場所

cookie.Value = HttpUtility.UrlEncode(cookieValue);

この結果は、次の設定で保存されている Cookie です

  • ドメイン = www.foo.com
  • RawSize = 230b
  • パス = /
  • 有効期限 = セッション
  • HttpOnly = HttpOnly
  • 値 = 暗号化

ユーザーがサイトを操作しているときに、カート Cookie が作成されているように見えますが、時々失われたりドロップされたりします。Elmah エラーを見て HTTP_COOKIE を確認すると、他のすべての Cookie が表示されます (他の Cookie も同じように設定されており、正常に機能します) が、カート Cookie は表示されません。

この問題のため、コードをより防御的なものに変更する必要がありました。しかし、ご想像のとおり、カート Cookie は購入プロセス全体で使用され、支払いを受け入れる購入に応答するときに失敗しましたが、カートがなくなるとシステムがクラッシュし、ユーザーには購入の成功が通知されません。幸いなことに、私はこれを早期に発見し、影響を受けたユーザーに払い戻しを行いました.

問題が発生したユーザー エージェント

  • Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (Gecko のような KHTML) Chrome/29.0.1547.62 Safari/537.36
  • Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (Gecko のような KHTML) Chrome/29.0.1547.57 Safari/537.36
  • Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (Gecko のような KHTML) Chrome/29.0.1547.62 Safari/537.36
4

1 に答える 1

2

解決策を教えてください。ここにほとんどの値を保存するためにCookieを使用しましたが、すべてのブラウザーで非常に機能しており、特定の時間だけ保存されています。このため、静的クラスを使用してどこからでもアクセスできるようにしました。

ここでもエンコードとデコードを行いました。ただし、エンコードとデコードを削除し、通常を渡すことでこれを保存できます。これが私のコードです

ここでは、静的メソッドを使用してクラスを配置します。HttpSecureCodeマシンキー暗号化を使用したエンコードとデコードで使用しました。この場合、デフォルトでは利用できない可能性があります。代わりに値を直接入力できます。

使用に非常にこだわっている場合はHttpSecureCode、このリンクを使用してクラスを構築してください

public class CookieStore
{
    public static void SetCookie(string key, string value, TimeSpan expires)
    {
        HttpCookie encodedCookie = HttpSecureCookie.Encode(new HttpCookie(key, value));

        if (HttpContext.Current.Request.Cookies[key] != null)
        {
            var cookieOld = HttpContext.Current.Request.Cookies[key];
            cookieOld.Expires = DateTime.Now.Add(expires);
            cookieOld.Value = encodedCookie.Value;
            HttpContext.Current.Response.Cookies.Add(cookieOld);
        }
        else
        {
            encodedCookie.Expires = DateTime.Now.Add(expires);
            HttpContext.Current.Response.Cookies.Add(encodedCookie);
        }
     }
    public static string GetCookie(string key)
    {
        string value = string.Empty;
        HttpCookie cookie = HttpContext.Current.Request.Cookies[key];

        if (cookie != null)
        {
            // For security purpose, we need to encrypt the value.
            HttpCookie decodedCookie = HttpSecureCookie.Decode(cookie);
            value = decodedCookie.Value;
        }
        return value;
    }

}

これらを使用すると、値を Cookie に簡単に保存し、必要に応じて値を取得できます

これらのメソッドを使用するのは簡単です

Cookie を設定する場合:

CookieStore.SetCookie("currency", "GBP", TimeSpan.FromDays(1)); // here 1 is no of days for cookie to live

Cookie を取得する場合:

string currency= CookieStore.GetCookie("currency");
于 2014-02-07T12:48:34.650 に答える