اذهب إلى المحتوى

السؤال

نشر (معدل)

مرحبا لدي موقع عند تجربته في هاتف أندرويد و في الحاسوب يعمل بشكل عادي، لكن بعد ارساله للعميل أخبرني أنه لا يعمل في جهاز الأيفون في كل من متصفح جوجل و سفاري؟

س1:هل لدى أحدكم هاتف أيفون يقوم بتجربة التصويت و إخباري اذا زر التصويت يعمل هذا الرابط:

http://voting-system-sadouki.herokuapp.com/VXgptEmRD

س2: ليس لدي هاتف أيفون كيف بإمكاني الآن تتبع المشكلة؟ماذا تفعل لو كنت في مكاني؟

تم التعديل في بواسطة اسماعيل صدوقي
تعديل السؤال

Recommended Posts

  • 0
نشر
بتاريخ 3 دقائق مضت قال Wael Aljamal:

المشكلة موجودة، زر التصويت لا يعمل، لا يتم تحديث العداد.

لكن الزر يعمل في هواتف الأندرويد و الحاسوب بشكل عادي، فقط المشكلة في هواتف الأيفون، ما تفسيرك لذلك؟

  • 0
نشر
بتاريخ 2 ساعات قال اسماعيل صدوقي:

لكن الزر يعمل في هواتف الأندرويد و الحاسوب بشكل عادي، فقط المشكلة في هواتف الأيفون، ما تفسيرك لذلك؟

توجه لمتصفح chrome ثم Developer Tools/Settings/Overrides ثم User agent واختر نوع المستخدم iPhone/iPad أو Safari

يفترض أن يعمل المتصفح مثل Safari بكل خصائص front-end ضمنه.

السبب على الأغلب:: هل تستخدم أي مكتبات أو خاصيات غير مدعومة على Safari أو ios web بشكل عام؟ تأكد من إصدار المكتبات، ويمكنك مشاركة هذه المعلومات لنعمل على حل المشكلة.

  • 0
نشر
بتاريخ 2 ساعات قال Wael Aljamal:

توجه لمتصفح chrome ثم Developer Tools/Settings/Overrides ثم User agent واختر نوع المستخدم iPhone/iPad أو Safari

عند استخدامها لا يحدث اي مشاكل,

بحثت عن بعض المواقع التي تحاكي اجهزة الأيفون وجدت هذا الموقع:

http://www.responsinator.com/?url=voting-system-sadouki.herokuapp.com%2FVXgptEmRD

عند الضغط على زر تصويت يظهر في console خطأ 419: message    "CSRF token mismatch."

610484a2639b3_Screenshotfrom2021-07-3100-00-33.png.3c1d119635d0e96e047cdc2a97c85d32.png

الكود الذي استخدمه لارسال التصويت لقاعدة البيانات:

$.ajax({
                type: 'post',
                url: "{{ route('vote') }}",
                data: {
                    '_token': "{{ csrf_token() }}",
                    'id': id,
                    'voted': voted,
                    'unique_url': unique_url
                },
                success: function (data) {
                  
                    if(data.status == true) {
                      // code
             
                    } else {
                      // code
                    }
                    
                }, error: function(reject) {
                    
                }

 

  • 0
نشر
بتاريخ 19 دقائق مضت قال اسماعيل صدوقي:

الكود الذي استخدمه لارسال التصويت لقاعدة البيانات:

لنحل مشكلة csrf سنقوم بوضع عنصر html وهو meta tag يخزن هذه القيمة:

ضعه في الترويسة مثلا.. (صفحة HTML الرئيسية للموقع main Layout

<meta name="csrf-token" content="{{ csrf_token() }}" />

كما يمكن يمكن عمل زر ومن ثم إخفاءه :

type="hidden"

ويمكن هكذا
<input type="hidden" name="_token" value="{!! {{ 'csrf_token()' }} !!}">

ثم عندما تريد إرسال الطلبية نجلب قيمته meta:

<script type="text/javascript">
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});
</script>

ونمررها في الترويسة..

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

resources/js/bootstrap.js file for Laravel 5.7 

and 

resources/assets/js/bootstrap.js for Laravel 5.6

هل تضع قيمة للجلسة session ؟ مثل Timeout ؟

يمكن زيادة مدة الجلسة:

config/session.php

'lifetime' => 360

 

  • 0
نشر
بتاريخ 21 دقائق مضت قال Wael Aljamal:

لنحل مشكلة csrf سنقوم بوضع عنصر html وهو meta tag يخزن هذه القيمة:

ضعه في الترويسة مثلا.. (صفحة HTML الرئيسية للموقع main Layout


<meta name="csrf-token" content="{{ csrf_token() }}" />

كما يمكن يمكن عمل زر ومن ثم إخفاءه :


type="hidden"

ويمكن هكذا
<input type="hidden" name="_token" value="{!! {{ 'csrf_token()' }} !!}">

ثم عندما تريد إرسال الطلبية نجلب قيمته meta:


<script type="text/javascript">
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});
</script>

ونمررها في الترويسة..

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


resources/js/bootstrap.js file for Laravel 5.7 

and 

resources/assets/js/bootstrap.js for Laravel 5.6

هل تضع قيمة للجلسة session ؟ مثل Timeout ؟

يمكن زيادة مدة الجلسة:


config/session.php

'lifetime' => 360

 

قمت بكافة التعديلات و للأسف مازالت نفس المشكلة.

بالنسبة لإصدار لارافيل أستعمل لارفيل 8!

  • 0
نشر
بتاريخ 7 دقائق مضت قال اسماعيل صدوقي:

قمت بكافة التعديلات و للأسف مازالت نفس المشكلة.

بالنسبة لإصدار لارافيل أستعمل لارفيل 8!

ضمن main layout لنبطل التخزين المؤقت:

@guest
    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="0" />
    <meta http-equiv="refresh" content="{{config('session.lifetime') * 60}}">
@endguest

ربما سبب المشكلة في ملفات الكوكيز، لاحظت Apple Bug Reporter PID #13966978.

حيث إن قمت بتثبيت عدة قيم كوكيز مباشرة فهذا لن يعمل، بل يجب وضع قيمة بسيطة كأول كوكيز يتم تخزينها:

setcookie("hi","true");

ثم أكمل باقي الكوكيز.

إن لم تعمل ربما يحل المشكلة التالي:

Cross-domain cookies/sessions in Safari 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...