سؤال

لدي الكود التالي الذي يقوم بتعيين ملف تعريف الارتباط:

  string locale = ((DropDownList)this.LoginUser.FindControl("locale")).SelectedValue;
  HttpCookie cookie = new HttpCookie("localization",locale);
  cookie.Expires= DateTime.Now.AddYears(1);
  Response.Cookies.Set(cookie);

ومع ذلك، عندما أحاول قراءة ملف تعريف الارتباط، تكون القيمة خالية.ملف تعريف الارتباط موجود.لم أتجاوز أبدًا ما يلي إذا قمت بالتحقق:

         if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value))

يساعد؟

هل كانت مفيدة؟

المحلول

ويتم الاختيار بعد ما بعد الظهر؟ إذا كان الأمر كذلك يجب عليك قراءة ملفات تعريف الارتباط من طلب جمع بدلا من ذلك.

واستمرت الكوكيز لمتصفح عن طريق إضافتها إلى Response.Cookies وقراءة مرة أخرى من Request.Cookies.

والكعك إضافة إلى الاستجابة يمكن قراءة فقط إذا كانت الصفحة هي على نفس الطلب.

نصائح أخرى

يظهر الجواب الأكثر احتمالا على هذا المشنور

عند محاولة التحقق من وجود ملف تعريف الارتباط باستخدام كائن الاستجابة بدلاً من Reqest، يقوم ASP.net تلقائيًا بإنشاء ملف تعريف ارتباط.

يحرر: كملاحظة، انتهى بي الأمر بكتابة برنامج يحتاج إلى التحقق من وجود ملفات تعريف الارتباط التي يصنعها ASP.NET كابوسًا بسبب واجهة برمجة تطبيقات ملفات تعريف الارتباط الخاصة بهم.انتهى بي الأمر بكتابة عملية تحويل تأخذ ملفات تعريف الارتباط من الطلب وتجعل حالتي كائنًا.في نهاية الطلب، أقوم بعد ذلك بترجمة كائن الحالة الخاص بي مرة أخرى إلى ملفات تعريف الارتباط وحشوها في الرد (إذا لزم الأمر).وقد خفف هذا من محاولة معرفة ما إذا كانت ملفات تعريف الارتباط موجودة في الاستجابة أم لا، وتحديثها بدلاً من ذلك، وتجنب إنشاء ملفات تعريف ارتباط لا طائل من ورائها، وما إلى ذلك.

هل أنت متعب "طلب" مجموعة بدلا من مجموعة "الاستجابة"؟

if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value))

وأعتقد أنني أعرف الجواب.

وفقط إزالة سمة العمل في العلامة <form> الخاص بك.

وجعلها تبدو مثل هذا: <form id="form1" runat="server">

وبدلا من ذلك: <form id="form1" action="DisplayName.aspx" runat="server">

ويجب عليك بعد ذلك استخدام Response.Redirect("DisplayName.aspx"); في التعليمات البرمجية.

وإذا كنت تجميع في وضع التصحيح، تشغيل تتبع للصفحات في السؤال والتأكد من الكعكة هو في جمع الطلب. تعيين أثر في توجيهpage في ملف ASPX.

وحاول هذا المقتطف -

string locale = ((DropDownList)this.LoginUser.FindControl("locale"))
                                                    .SelectedValue;  
HttpCookie myCookie = new HttpCookie("localization");
Response.Cookies.Add(myCookie);
myCookie.Values.Add("locale", locale);
Response.Cookies["localization"].Expires = DateTime.Now.AddYears(1);

& لقراءتها -

if (Request.Cookies["localization"] != null)
{
   HttpCookie cookie = Request.Cookies["localization"];
   string locale = cookie.Values["locale"].ToString();
}

وكان لي مشكلة مماثلة، لم أتمكن من قراءة ملفات تعريف الارتباط على إعادة النشر. وكانت القضية بالنسبة لي أن راجعت الملكية الآمنة من الكعكة إلى true. ويقال أنه عندما يتم تشغيل خاصية الآمنة من الكعكة، فإنه يتسبب في الكعكة إلى أن تنتقل إلا إذا كان اتصال يستخدم طبقة مآخذ التوصيل الآمنة. ولست متأكدا، ولكن، كيف كنت قادرا على رؤية الكعكة في المتصفح لأول مرة، ولكن ليس على إعادة النشر، معتبرا ان كنت لا تحيل على SSL. على أية حال، وتحول cookie.Secure إلى false، حل المشكلة، وكان الكوكيز على قراءة إعادة النشر.

وآسف إذا كان هذا لا تملك ان تفعل شيئا مع مشكلتك، أردت أن حصة هذا، لأن قضيت بعض الوقت تبحث كيفية حل هذه.

هل إضافة هذا بمثابة تعليق على الجواب كريس Marisic ولكن ليس لدي أن privelage: - (

وبالإضافة إلى ما قاله كريس في تحرير له حول إزالة الكوكيز من الطلب، لتكون قادرة على قراءة قيمة الكوكيز التي تم إنشاؤها حديثا في إعادة النشر I انتهى به

Private Sub SetPageSize(ByVal pageSize As Integer)

    ' Set cookie value to pageSize
    Dim pageSizeCookie As HttpCookie = New HttpCookie(pageSizeCookieName)
    With pageSizeCookie
        .Expires = Now.AddYears(100)
        .Value = pageSize.ToString
    End With

    ' Add to response to save it
    Me.Response.Cookies.Add(pageSizeCookie)

    ' Add to request so available for postback
    Me.Request.Cookies.Remove(pageSizeCookieName)
    Me.Request.Cookies.Add(pageSizeCookie)

End Sub

وخطوط Request.Cookies.Remove وRequest.Cookies.Add مما يجعل العمل على إعادات النشر

واستخدام Response.Cookies.Add (كوكي)؛ بدلا من Response.Cookies.Set (كوكي)؛

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top