Bermula, menguruskan, dan memusnahkan sesi dalam PHP melibatkan beberapa fungsi dan amalan utama.
Memulakan Sesi:
Untuk memulakan sesi dalam PHP, anda menggunakan fungsi session_start()
. Fungsi ini mesti dipanggil sebelum sebarang output dihantar kepada penyemak imbas. Ia memulakan sesi baru atau menyambung semula yang sedia ada berdasarkan ID sesi yang diluluskan melalui permintaan GET atau POST, atau diluluskan melalui kuki.
<code class="php">session_start();</code>
Menguruskan sesi:
Sebaik sahaja sesi dimulakan, anda boleh menyimpan data dalam sesi menggunakan array superglobal $_SESSION
. Inilah contoh:
<code class="php">$_SESSION['username'] = 'john_doe'; $_SESSION['last_activity'] = time();</code>
Untuk mengakses atau mengubah suai data sesi, anda terus menggunakan array $_SESSION
:
<code class="php">echo $_SESSION['username']; $_SESSION['last_activity'] = time();</code>
Memusnahkan sesi:
Untuk memusnahkan sesi, anda boleh menggunakan beberapa kaedah bergantung kepada keperluan anda:
Pemboleh ubah sesi yang tidak diset:
Untuk membersihkan semua pembolehubah sesi, gunakan unset($_SESSION)
.
<code class="php">unset($_SESSION);</code>
Hancurkan sesi:
Untuk memusnahkan data sesi pada pelayan, gunakan session_destroy()
. Ini tidak menyemarakkan pembolehubah sesi.
<code class="php">session_destroy();</code>
Penamatan Sesi Lengkap:
Untuk menamatkan sesi sepenuhnya, menggabungkan kaedah di atas dan tidak menyentuh cookie sesi:
<code class="php">session_unset(); session_destroy(); setcookie(session_name(), '', time() - 3600, '/');</code>
Mengamankan Pengurusan Sesi di PHP melibatkan beberapa amalan terbaik:
Regenerasi ID Sesi:
Gunakan session_regenerate_id(true)
untuk menghasilkan ID sesi baru apabila pengguna log masuk atau tahap keistimewaan mereka berubah. Ini membantu mencegah serangan penetapan sesi.
<code class="php">session_regenerate_id(true);</code>
Tetapkan konfigurasi sesi yang betul:
Laraskan tetapan konfigurasi sesi dalam php.ini
atau gunakan fungsi ini_set()
:
session.cookie_httponly = 1
: Mencegah JavaScript sisi klien daripada mengakses cookie sesi.session.cookie_secure = 1
: Memastikan Cookie Sesi hanya dihantar melalui HTTPS.session.use_only_cookies = 1
: Memastikan ID sesi hanya diluluskan melalui kuki, bukan melalui parameter URL.filter_var()
dan htmlspecialchars()
.session.gc_maxlifetime
untuk menamatkan sesi tidak aktif secara automatik.memcached
atau redis
untuk menyimpan data sesi.Memastikan integriti data sesi dalam aplikasi PHP melibatkan beberapa strategi:
filter_var()
, htmlspecialchars()
, dan intval()
untuk memastikan integriti data. Melaksanakan penyulitan data:
Menyulitkan data sesi sensitif menggunakan fungsi OpenSSL PHP atau perpustakaan seperti libsodium
. Ini menambah lapisan perlindungan tambahan jika data sesi dikompromi.
<code class="php">$data = 'sensitive_data'; $encrypted = openssl_encrypt($data, 'AES-256-CBC', 'secret_key', 0, 'iv'); $_SESSION['encrypted_data'] = $encrypted;</code>
Melaksanakan checksums:
Gunakan checksum atau hash untuk mengesahkan integriti data sesi. Simpan hash data bersama -sama dengan data itu sendiri, dan sahkannya apabila pengambilan semula.
<code class="php">$data = 'some_data'; $checksum = hash('sha256', $data); $_SESSION['data'] = $data; $_SESSION['checksum'] = $checksum; // Later, verify the checksum if (hash('sha256', $_SESSION['data']) === $_SESSION['checksum']) { // Data is intact }</code>
memcached
atau redis
dengan konfigurasi keselamatan yang sesuai.Untuk mengelakkan serangan penetapan sesi, anda perlu memastikan bahawa ID sesi diperbaharui dan sesi lama dimusnahkan. Berikut adalah kaedah yang tersedia untuk memusnahkan sesi dalam PHP:
ID Sesi Regenerasi:
Apabila pengguna log masuk atau perubahan tahap keistimewaan mereka, gunakan session_regenerate_id(true)
untuk menghasilkan ID sesi baru dan memusnahkan sesi lama. Ini penting untuk mencegah serangan penetapan sesi.
<code class="php">session_regenerate_id(true);</code>
Pemboleh ubah sesi yang tidak diset:
Kosongkan semua pembolehubah sesi menggunakan unset($_SESSION)
untuk memastikan tiada data dari sesi lama kekal.
<code class="php">unset($_SESSION);</code>
Hancurkan sesi:
Gunakan session_destroy()
untuk memusnahkan data sesi pada pelayan.
<code class="php">session_destroy();</code>
Cookie Sesi Unset:
Tabap cookie sesi untuk mengelakkan akses masa depan ke sesi:
<code class="php">setcookie(session_name(), '', time() - 3600, '/');</code>
Penamatan Sesi Lengkap:
Menggabungkan kaedah di atas untuk penamatan sesi lengkap:
<code class="php">session_unset(); session_destroy(); session_regenerate_id(true); setcookie(session_name(), '', time() - 3600, '/');</code>
Dengan mengikuti kaedah ini, anda boleh memusnahkan sesi dengan berkesan dan mencegah serangan penetapan sesi, memastikan keselamatan permohonan PHP anda.
Atas ialah kandungan terperinci Bagaimana anda memulakan, mengurus, dan memusnahkan sesi di PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!