Untuk mengekalkan sesi untuk tempoh masa tertentu dan menamatkannya selepas itu, melaksanakan tamat masa sesi tersuai adalah disyorkan. Pendekatan ini lebih dipercayai daripada bergantung pada tetapan sesi seperti session.gc_maxlifetime atau session.cookie_lifetime.
1. session.gc_maxlifetime:
session.gc_maxlifetime menentukan jumlah masa selepas itu data sesi dianggap 'sampah' dan dialih keluar. Walau bagaimanapun, kutipan sampah berlaku secara sporadis, menjadikannya kaedah yang tidak boleh dipercayai untuk tamat tempoh sesi.
2. session.cookie_lifetime:
session.cookie_lifetime hanya mempengaruhi jangka hayat kuki yang dihantar ke penyemak imbas, bukan sesi itu sendiri. Pelayan bertanggungjawab untuk membatalkan sesi, bukan pelanggan.
Penyelesaian Disyorkan:
Laksanakan tamat masa sesi tersuai dengan mengekalkan cap masa yang menjejaki masa aktiviti terakhir. Kemas kini cap masa ini dengan setiap permintaan.
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
Kaedah ini tamat tempoh data sesi dengan berkesan selepas 30 minit aktiviti dan menghalang penyingkiran pramatang oleh pemungut sampah.
Untuk keselamatan yang dipertingkatkan, pertimbangkan untuk menjana semula secara berkala ID sesi untuk mengelakkan penetapan sesi serangan.
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:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Tamat Tempoh Sesi PHP Dengan Berkesan Selepas 30 Minit Tidak Beraktif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!