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
Lepaskan: 2024-12-24 22:56:15
asal
370 orang telah melayarinya

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
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan