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

كيفية إنهاء جلسة PHP عند إغلاق الصفحة

ايمن ميلاد

السؤال

السلام عليكم ورحمة الله وبركاته 

انا لدي كود تالي في صفحة تسجيل الخروج 

<?php
session_start();
session_unset();
session_destroy();
header("Location: login.php");

اريد عند غلق موقع وفتح مثلا موقع كورة ورجوع للموقع من جديد اريده يكون عامل تسجيل خروج تلقائيا اقصد غلق موقع وليس متصفح 

ادخل له من جديد اجده غير مسجل دخول

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

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

الجلسات (Sessions)

الجلسة بتخزن المعلومات على السيرفر، يعني مش على جهاز المستخدم. ده بيساعد في حماية البيانات لأن محدش غير السيرفر يقدر يوصل لها. بتستخدم في حاجات زي تسجيل الدخول وحفظ محتويات سلة التسوق. والحاجة الحلوة فيها أنها بتنتهي لما تقفل المتصفح.

الكوكيز (Cookies)

الكوكيز دي ملفات صغيرة بتتخزن على جهاز المستخدم، وبتحتفظ بمعلومات يمكن استخدامها في زيارات لاحقة للموقع. بتستخدم في حاجات زي حفظ تفضيلات المستخدم أو حالة تسجيل الدخول حتى لو قفلت المتصفح وفتحته تاني.

الفروق الأساسية بين الجلسات والكوكيز

1. مكان التخزين:

  •  الجلسات: على السيرفر.
  • الكوكيز: على جهاز المستخدم.

2. الأمان:

  • الجلسات: أأمن لأن البيانات مخزنة على السيرفر.
  • الكوكيز: أقل أمان لأنها مخزنة في المتصفح وممكن تتسرب.

3. مدة الصلاحية:

  • الجلسات: بتنتهي لما تقفل المتصفح.
  • الكوكيز: يمكن تحديد مدتها لفترة معينة أو تنتهي لما تقفل المتصفح.

وبالنسبة لسؤالك عن كيفية عمل تسجيل خروج تلقائي لما يغلق المستخدم الموقع، يمكنك استخدام الكوكيز بدلاً من الجلسات لأنها بتسمح لك تحدد مدة الصلاحية على إنها تنتهي بمجرد إغلاق الصفحة. ده يخلي الكوكيز تنتهي صلاحيتها لما المستخدم يقفل الصفحة، وكده لما يرجع تاني للموقع هيحتاج يعمل تسجيل دخول من جديد.

لما المستخدم يعمل login، هنعمل كوكي نحط فيها معلوماته زي اليوزر أيدي أو الوقت. 

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

مثلا كده:
لما المستخدم يعمل لوجن:

if (isset($_POST['login'])) {
    // Check user credentials
    
    $expire = 0; // Expire cookie when browser closes
    setcookie("user_id", $user_id, $expire, "/");
    setcookie("session_active", true, $expire, "/");

    header("Location: index.php");
}

وفي أول كل صفحة:

if (!isset($_COOKIE['session_active'])) {
    header("Location: login.php");
}

وعشان نعمل لوج أوت:

setcookie("user_id", "", time() - 3600, "/"); 
setcookie("session_active", "", time() - 3600, "/");

header("Location: login.php");

كده هنضمن ان لما المستخدم يقفل الصفحة ويرجع تاني، الكوكي هتبقى مش موجودة وهنرجعه على صفحة اللوجن تلقائي من غير ما يقفل المتصفح خالص.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

شكرا علي الرد اخي خالد في ميزان حسانتك لدي استفسار اخر 

انا لدي صفحة به بيانات استعمل في زر طباعة window.print  يطبع كل صفحة انا اريده يطبع اشياء معينه فيه 

مثلا صورة هادي اريد يطبع جدول ومختار من select 

<table class="table table-striped table-responsive">
    <tr>
        <th style="text-align: right;"> رقم القيد</th>
        <th style="text-align: right;">اسم الطالب</th>
        <th style="text-align: right;">عنوان المشروع </th>
        <th style="text-align: right;">اسم القسم </th>
        <th style="text-align: right;">اسم المشرف </th>

        <!--   <th style="text-align: right;"> ملف المشروع </th> -->
        <!-- <td><a href=\"download_script.php?file=uploads/" . $row['path_file'] . "\">تحميل الملف</a></td> -->
        <!-- عمود id_p  في جدول ملف مشروع مفتاح اجنبي-->
    </tr>
    <?php
    require('config.php');
    $db = new db;
    $result = $db->getAllstudent();
    while ($row = mysqli_fetch_array($result)) {
        echo "<tr>
					<td>" . $row['num_std'] . "</td>
					<td>" . $row['name_std'] . "</td>
					<td>" . $row['name_project'] . "</td>
                    <td>" . $row['name_dept'] . "</td>
                    <td>" . $row['name_teah'] . "</td>
				</tr>";
    }
    $db->closeCon();
    ?>
</table>

 

لقطة شاشة 2024-04-14 121601.png

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

لا شكر على واجب،

يمكنك استخدام ميزة ورقة أنماط CSS مخصصة للطباعة. ورقة الأنماط هذه تمكنك من تحديد العناصر التي تريد طباعتها والعناصر التي تريد إخفاءها عند الطباعة. 

يجب انشاء ملف css مخصص للطباعة، ونضعه في راس الصفحة كده:

<link rel="stylesheet" href="print.css" media="print">

في ملف print.css هنكتب الأنماط اللي عايزين نطبقها على العناصر اللي هتتطبع بس، زي مثلا:

body, html {
    visibility: hidden; /* نخفي كل حاجة الأول */
}
.printable, .printable * {
    visibility: visible; /* ونظهر بس اللي فيها كلاس printable */
}
.printable {
    position: absolute;
    left: 0;
    top: 0; 
}

بعدين في الجدول اللي عايز نطبعه نضيف كلاس printable عليه:

<table class="table table-striped table-responsive printable">
    <!-- كود الجدول هنا -->
</table>

وآخر خطوة نضيف زر للطباعة بيستخدم window.print():

<button onclick="window.print()">اطبع الجدول</button> 

عندما المستخدم يدوس على الزر ده، هيطبع الجدول بس لأن الأنماط في print.css خصصت إن اللي هيبان هو العناصر اللي فيها كلاس printable بس.

وممكن كمان تضيف الكلاس ده على أي عنصر تاني عايز يتطبع زي select مثلا.

وهكذا استطعنا التحكم في ايه اللي هيتطبع وايه اللي لأ عن طريق إضافة الكلاس printable عليه. 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

جزاك الله خيرًا على كلماتك الطيبة.
لإضافة خطوط فاصلة بين الصفوف والأعمدة يمكنك اضافه للجدول كلاس table-bordered حيث يضيف للحدود على كافة جوانب الجدول والخلايا.

ام بالنسبه لعرض نص مختار من قائمة select عند الطباعة، يمكنك استخدام جافا سكريبت لقراءة القيمة المختارة وطباعتها في عنصر يمكن طباعته. سأضيف كود جافا سكريبت لهذه الوظيفة ستضيف سكربت جافاسكربت للصفحة:

<script>
function printPage() {
    // نقرأ القيمة المختارة من السيلكت
    var selectedText = document.getElementById('options-select').options[document.getElementById('options-select').selectedIndex].text;
    
    // نعرض القيمة دي في عنصر عشان نطبعها
    document.getElementById('selected-value').innerText = "القيمة المختارة: " + selectedText;
    
    // ونطبع
    window.print();
}
</script>

ونضيف عنصر فاضي عشان نحط فيه القيمة المختارة قبل ما نطبع، ونديله كلاس printable علشان يتطبع:

<div id="selected-value" class="printable"></div>

3. ونغير الزر بتاع الطباعة عشان يستدعي الفنكشن printPage() دي:

<button onclick="printPage()">اطبع الجدول والخيار المختار</button>

كده لما المستخدم يدوس على الزر، هيقرأ القيمة المختارة من السيلكت، ويعرضها في الديف اللي عملناه، وبعدين يطبع الجدول والقيمة المختارة مع بعض.

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...