Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Tamat Tempoh Sesi PHP dengan Amanah Selepas 30 Minit Tidak Berfungsi?

Bagaimana untuk Tamat Tempoh Sesi PHP dengan Amanah Selepas 30 Minit Tidak Berfungsi?

Barbara Streisand
Barbara Streisandasal
2024-12-24 22:56:15435semak imbas

How to Reliably Expire a PHP Session After 30 Minutes of Inactivity?

Cara Tamat Tempoh Sesi PHP dengan Berkesan selepas 30 Minit

Walaupun PHP menyediakan pilihan seperti session.gc_maxlifetime dan session.cookie_lifetime untuk tamat tempoh sesi, mereka tidak boleh dipercayai sepenuhnya. Berikut ialah pendekatan komprehensif untuk melaksanakan mekanisme tamat masa sesi anda sendiri.

Isu dengan Pilihan Terbina Dalam PHP:

  • session.gc_maxlifetime : Ia menentukan apabila data sesi dianggap "sampah" dan dibersihkan semasa permulaan sesi. Walau bagaimanapun, pemungut sampah berjalan secara sporadis, dengan kebarangkalian lalai hanya 1%, berpotensi membawa kepada penamatan sesi pramatang.
  • session.cookie_lifetime: Pilihan ini menentukan hayat kuki sesi yang dihantar ke pelayar. Walau bagaimanapun, ia tidak membatalkan sesi itu sendiri, yang tetap menjadi tanggungjawab pelayan.

Melaksanakan Tamat Masa Sesi Tersuai:

Cara paling berkesan untuk tamat tempoh sesi selepas tempoh tertentu tidak aktif adalah untuk melaksanakan mekanisme tamat masa anda sendiri. Ini melibatkan pengekalan cap masa aktiviti terakhir (permintaan) dan mengemas kininya dengan setiap permintaan. Jika aktiviti terakhir melebihi 30 minit yang lalu, anda boleh menyahset dan memusnahkan sesi.

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    // last request was more than 30 minutes ago
    session_unset(); // unset $_SESSION variable for the run-time
    session_destroy(); // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp

Dengan mengemas kini data sesi secara berterusan, anda menghalang tarikh pengubahsuaian fail sesi daripada dialih keluar sebelum waktunya oleh pengumpul sampah.

Langkah Keselamatan Tambahan:

Untuk mengelakkan serangan seperti penetapan sesi, anda boleh menjana semula ID sesi secara berkala dengan mengemas kini cap masa $_SESSION['CREATED']:

if (!isset($_SESSION['CREATED'])) {
    $_SESSION['CREATED'] = time();
} else if (time() - $_SESSION['CREATED'] > 1800) {
    // session started more than 30 minutes ago
    session_regenerate_id(true); // change session ID for the current session and invalidate old session ID
    $_SESSION['CREATED'] = time(); // update creation time
}

Nota:

  • Pastikan session.gc_maxlifetime ditetapkan kepada nilai sekurang-kurangnya sama dengan jangka hayat pengendali tamat tempoh tersuai anda (1800 dalam contoh ini).
  • Untuk tamat tempoh sesi selepas 30 minit aktiviti dan bukannya sejak mula, gunakan setcookie dengan masa tamat masa() 60 * 30 untuk memastikan kuki sesi aktif.

Atas ialah kandungan terperinci Bagaimana untuk Tamat Tempoh Sesi PHP dengan Amanah Selepas 30 Minit Tidak Berfungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn