سؤال

أحاول إجراء اختبار بسيط لبرنامج PHP النصي للجلسات.في الأساس يقوم بزيادة العداد (المخزن في $_SESSION) في كل مرة تقوم فيها بتحديث تلك الصفحة.يعمل هذا، ولكني أحاول الحصول على رابط لتدمير الجلسة التي تعيد تحميل الصفحة باستخدام ملف ?destroy=1 معامل.لقد جربت بعض عبارات if لمعرفة ما إذا تم تعيين هذه المعلمة وإذا كان الأمر كذلك لتدمير الجلسة ولكن يبدو أنها لا تعمل.

لقد قمت حتى بوضع عبارة if في النص الرئيسي لتنبثق رسالة إذا تم تعيين المعلمة - ولكن لا يبدو أنه تم التقاطها.

أعلم أنني أفعل شيئًا سخيفًا (أنا مبتدئ في PHP) ولكن لا يمكنني العثور على ما هو عليه...

انظر الكود هنا:

<?php
if ($_POST['destroy']) {
    session_destroy();
} else {
    session_start();
}    
?>

<html>
    <head>
        <title>Session test</title>
    </head>
    <body>
    <?php
    if (isset($_POST['destroy'])) {
        echo "Destroy set";
    }

    $_SESSION['counter']++;

    echo "You have visited this page " . $_SESSION['counter'] . " times" . "<BR>";
    echo "I am tracking you using the session id " . session_id() . "<BR>";
    echo "Click <a href=\"" . $_SERVER['PHP_SELF'] . "?destroy=1\">here</a> to destroy the session.";
?>
هل كانت مفيدة؟

المحلول

أعتقد أنك وضعت

$_POST['destroy']

بدلاً من

$_GET['destroy']

تحتاج إلى استخدام نموذج إذا كنت ترغب في استخدام متغير $_POST.يتم تخزين متغيرات $_GET في عنوان URL.

نصائح أخرى

بالمناسبة يمكنك استخدامها

$_REQUEST['تدمير']

والتي ستعمل بغض النظر عما إذا تم تمرير البيانات في طلب POST أو GET.

في ال دليل PHP يحتوي على مقتطف كود لتدمير الجلسة.

session_start();
$_SESSION = array();
if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time()-42000, '/');
}
session_destroy();

نعم، سوف تريد أن تفعل

if( $_GET['destroy'] == 1 )

أو

if( isset($_GET['destroy']) )

أعلم أنني أفعل شيئًا سخيفًا (أنا مبتدئ في PHP) ولكن يبدو أنني لا أستطيع العثور على ما هو عليه...

هذه هي الطريقة التي ستتعلم بها الكثير ؛) استمتع بها ...

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