كيف يمكنني التحقق لمعرفة ما إذا كان المستخدم مجهولاً أو قام بتسجيل الدخول من جافا سكريبت؟

StackOverflow https://stackoverflow.com/questions/1212895

سؤال

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

وجدت هذا السؤال, ، ولكنه كود php ولم أكن متأكدًا مما إذا كان هناك متغير جلسة يسمى logged_in يتم تخزينه عند تسجيل الدخول أو إذا كان هذا مجرد شيء قام هذا الشخص بتنفيذه بنفسه.

هل يعرف أحد كيف يمكنني التحقق لمعرفة ما إذا كان المستخدم قد قام بتسجيل الدخول من جافا سكريبت، وربما باستخدام اياكس؟

يحرر: أنا أقوم بتشغيل Asp.Net MVC، آسف كان ينبغي تحديد ذلك

هذا حتى أتمكن من تنفيذ تسجيل الدخول إلى Ajax من جانب العميل.عند تحميل الصفحة، أحتاج إلى معرفة ما إذا كان المستخدم قد قام بتسجيل الدخول أم لا حتى أتمكن من تنفيذ شيء مشابه لـ <asp:LoggedInView> التحكم باستخدام مسج.

شكرًا،
غير لامع

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

المحلول

لا يمكنك قراءة البيانات المحفوظة للجلسة من JavaScript.

إحدى الطرق السهلة للقيام بذلك هي إنشاء JS var من PHP (أسهل من حل ملفات تعريف الارتباط)، مثل هذا:

if ($_SESSION['logged_in'] == 1) {
    echo '<script type="text/javascript">var logged_in=true;</script>';
} else {
    echo '<script type="text/javascript">var logged_in=false;</script>';
}

بعد ذلك سوف يقوم JS ببساطة بالتحقق من النسخة الأصلية logged_in var لمعرفة ما إذا كان المستخدم قد قام بتسجيل الدخول.

<script type="text/javascript">
    if (logged_in) {
        alert("My user is logged in!");
    }
</script>

نصائح أخرى

[إخلاء المسؤولية] نظرًا لأنني تلقيت الكثير من التعليقات من الأشخاص حول كون هذه "ممارسة سيئة"، سأقول هذا فقط:من الممارسات السيئة القيام بذلك بهذه الطريقة، لكننا لا نعرف ما الذي ينوي الملصق الأصلي فعله.على حد علمنا، فقد قام بكل شيء آخر بشكل صحيح وآمن بنسبة 100%، وكان يسأل فقط عما إذا كانت هناك طريقة للحصول عليه من جافا سكريبت.ما قمت به أدناه هو أفضل فكرة لدي عن كيفية إنجاز ما طلبه.[/تنصل]

يمكنك جعل لغة php الخاصة بك، أو أي لغة خلفية تستخدمها، تقوم بتعيين ملف تعريف ارتباط يمكنك بعد ذلك قراءته باستخدام جافا سكريبت.

document.cookie

سهل هكذا.سيتعين عليك البحث في سلسلة ملفات تعريف الارتباط عن اسم ملف تعريف الارتباط الذي قمت بتسجيل الدخول إليه.

يمكنك أيضًا استخدام ذلك لتعيين ملف تعريف الارتباط وإجراء تسجيل الدخول من خلال جافا سكريبت (رغم أنها ربما ليست الفكرة الأفضل).

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

[يحرر]

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

نعم، ستكون مكالمة أجاكس طريقة سهلة جدًا للتحقق من ذلك.أنا أحب jQuery أكثر، لذا فإن تجربتي مع ajax تكمن هناك، ولكن في الأساس، يمكنك إجراء استدعاء ajax إلى وظيفة الواجهة الخلفية لديك، وتقوم وظيفة الواجهة الخلفية هذه فقط بالتحقق من متغير جلسة "تسجيل الدخول"، وإرجاع صحيح أو خطأ.

أيضًا، بما أنك ذكرت الآن أنك تستخدم jQuery، راجع هذه الصفحة لسهولة الوصول إلى ملفات تعريف الارتباط jQuery.[/يحرر]

يتم تنفيذ هذا الحل عادةً مع اللغات الموجودة على جانب الخادم.مع JS ، على الأقل ، يمكن أن تضع في عميلها ملف تعريف ارتباط حيث تخزن تلك المعلومات.

ولكن مع Ajax يجب أن يكون لديك صفحة (على سبيل المثال:check_login.jsp/.apsx etc.) where to check if the user is logged (accessing to a DB, a Session variable etc.) and if so return back to JS (via JSON) that information and for example light a DIV with a اللون الاخضر...

لذا:

check_login.aspx-> إرجاع المعلومات عبر Response.Write("{user_logged:true}");

من login.aspx في كود HTML الخاص بك مع JS، سيكون لديك اتصال AJAX حيث يكون لديك xmlhttp هو بالفعل مثال على XMLHttpRequest هدف...

var logged = JSON.parse(xmlhttp.responseText); // don't use eval
if(logged.user_logged)
document.getElementById("u_l").style.backgroundColor = "#00FF00";

ليس له أي معنى.إذا قام مستخدم بتسجيل الدخول، فأنت تعرف ذلك من جانب الخادم.لذلك ليس عليك التحقق مما إذا كنت قد قمت بتسجيل الدخول من جانب العميل.

--يحرر :

بعد توضيحك، لا يمكنني إلا أن أقترح التحقق من وحدة التحكم إذا تم تسجيل المستخدم، وإذا كان الأمر كذلك فسوف تعرض العرض العادي، وإلا فسوف تظهر عرضًا مختلفًا.

- تحرير أضاف القول المأثور:

Some people, when confronted with a problem, think “I know, I'll use ajax.” Now they have على الأقل مشكلتين

أفضل طريقة في رأيي هي القيام بذلك عبر اياكس.

هذا سوف يفعل ذلك.

ملف JS...

        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: 'check.php',
            success: function(d) { 
                if(d.r == "fail") {
                    window.location.href = d.url;
                } else {
                    console.log(d.msg);
                }
            }
        });

check.php

    if(!isset($_SESSION['loggedin'])){

        $response = array(
            'r' => 'fail',
            'url' => '/home.php'
        );
    } else {

        $response = array(
            'r' => 'success',
            'msg' => 'Logged in'
        );
    }

    echo json_encode($response);
    exit;

يمكنك تحليل document.cookie.

يمكنك التحقق من الكود أدناه:

if(jQuery('body').hasClass('logged-in')) {
 // add your jquery code
 }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top