Sesi mengacu pada waktu yang berlalu dari memasuki situs web hingga menutup browser saat pengguna menjelajahi situs web, yaitu waktu yang dihabiskan pengguna untuk menjelajahi situs web. Dari definisi di atas kita dapat melihat bahwa Sesi sebenarnya adalah konsep waktu tertentu.
Secara umum, variabel (mengacu pada variabel sisi server, sama di bawah) pada halaman tertentu di situs web tidak dapat digunakan di halaman berikutnya. Lebih mudah untuk menanganinya dengan sesi. Variabel yang didaftarkan dalam sesi dapat digunakan sebagai variabel global. Dengan cara ini, kita dapat menggunakan sesi untuk otentikasi identitas pengguna, perekaman status program, dan transfer parameter antar halaman.
Bagaimana sesi diimplementasikan dalam versi PHP3?
PHP3 sendiri tidak mengimplementasikan fungsi session. Kita hanya bisa menggunakan metode lain untuk mengimplementasikannya, yang paling terkenal adalah phplib. Fungsi paling dasar dari phplib meliputi otentikasi pengguna, manajemen sesi, izin, dan abstraksi basis data. Selanjutnya kami akan menjelaskan cara menggunakan phplib untuk mengimplementasikan sesi.
1. Pertama instal phplib (lingkungannya adalah win2000+php3.0.16+Apache1.3.12+phplib7.2c+mysql3.23.21 untuk win32).
Pertama, unzip phplib. Ada direktori "php" di dalamnya instalasi.direktori. Misal: Apache diinstal di direktori d:Apache, lalu salin direktori "php" ke d:Apache, dan salin file dan direktori di direktori halaman dari direktori phplib (tidak termasuk direktori itu sendiri) ke d: Di bawah Apachehtdocs.
Pustaka kelas phplib perlu diinisialisasi sesuai dengan sistem, dan file local.inc mungkin perlu dimodifikasi, yang berisi beberapa parameter dasar, yang dapat dimodifikasi sesuai dengan situasi aktual mesin Anda.
Ubah program pada file d:Apachephpprepend.php menjadi berikut:
if (!isset($_PHPLIB) or !is_array($_PHPLIB)) {
$_PHPLIB["libdir"] = "d:/Apache/php/"; //Jalur ke direktori php di bawah phplib
}
Ubah file d:Apachephplocal.inc:
class DB_Example extends DB_Sql {
var $Host = "localhost"; //Nama host dari database mysql var $Database = "test"; //Nama database var $User = "root"; //Nama pengguna database var $Password = "1234567"; // Kata sandi pengguna basis data
}
Terakhir, tabel awal dibuat berdasarkan file create_database.mysql di subdirektori barang di bawah direktori phplib.
Karena setiap halaman yang menggunakan phplib harus terlebih dahulu menemukan file perpustakaan kelas yang diperlukan untuk menjalankan phplib, kita dapat mengatur variabel auto_prepend di php.ini untuk mendukungnya. phplib berisi file prepend.php dan menentukan auto_prepend sebagai "d: / Apache/php/prepend.php" (dengan tanda kutip), setiap halaman akan secara otomatis menyertakan perpustakaan kelas phplib. Kita juga dapat menambahkan direktori tempat perpustakaan kelas phplib berada ke variabel include sehingga file-file ini dapat ditemukan. 2. Memanggil fungsi page_open().
Pada setiap halaman yang menggunakan phplib, Anda harus memanggil fungsi page_open terlebih dahulu untuk inisialisasi, contoh:
<?php
page_open(array("sess" => "Test_Session"));
?>
Variabel array (sess) digunakan untuk menginisialisasi beberapa objek penyimpanan status. Perlu diperhatikan di sini: Nama bawaan phplib (sess) harus digunakan.
Karena phplib menggunakan Cookies untuk menyimpan informasi status, fungsi page_open() harus dipanggil sebelum konten halaman dikeluarkan ke browser. Skrip php harus diakhiri dengan page_close(), yang akan menulis kembali data status yang relevan ke database, jika tidak, variabel akan hilang.
3. Penggunaan khusus.
Setelah mendaftarkan variabel, Anda dapat menggunakannya di halaman berikutnya hingga sesi berakhir. Metode:
<?php $sess->register( "varname"); ?>
Perhatikan bahwa varname di sini bukan nilai variabel, tetapi nama variabel terlebih dahulu dan kemudian menetapkan nilainya. Anda dapat mengubah nilai suatu variabel pada halaman tertentu, dan nilai perubahan tersebut akan diperoleh ketika variabel tersebut diakses pada halaman berikutnya. Jenis variabelnya beragam dan dapat berupa string, angka, atau array. Misalnya:
halaman pertama:
<?php
page_open(array("sess" => "Uji _Sesi"));
$sess->register( "welcome"); //Daftarkan variabel $welcome, perhatikan bahwa tidak perlu menambahkan $
$selamat datang="Halo, dunia PHP!";
…
halaman_tutup();
?>
Halaman kedua:
<?php
page_open();//Mulai sesi
echo $welcome;//Menampilkan $welcome yang ditentukan di halaman pertama
page_close();//Menyimpan informasi status
?>
Setelah mendaftarkan variabel, ketika halaman akhirnya memanggil fungsi page_close(), setiap variabel sesi akan ditulis kembali ke database. Jika Anda lupa memanggil fungsi page_close(), variabel tidak akan ditulis kembali ke database, sehingga menimbulkan konsekuensi yang tidak dapat diprediksi. Ketika variabel telah digunakan dan tidak diperlukan lagi, fungsi berikut dapat dipanggil untuk menghapus variabel:
<?php
page_open(array("sess" => "Uji _Sesi"));
…
$sess->batalkan pendaftaran( "nama_variabel");
…
halaman_tutup();
?>
Bagaimana cara mengimplementasikan sesi dalam versi PHP4?
Sesi PHP4 juga bergantung pada cookie untuk menyimpan id sesi dan menggunakan sistem file untuk menyimpan variabel (secara default, variabel sesinya tidak dapat menyimpan objek. Tentu saja, sesi tersebut juga dapat disimpan dalam database.
Ada banyak fungsi yang berhubungan dengan session di php4 (lihat artikel konfigurasi php.ini untuk detailnya). Biasanya kita hanya perlu memanggil tiga fungsi: session_start(), session_register(), session_is_registered().
Panggil fungsi session_start() di awal setiap halaman yang memerlukan sesi, misalnya:
<?session_start()?>
<html><tubuh>
<?
$selamat datang="halo dunia!";
session_register("welcome");//Daftarkan variabel $welcome, perhatikan tidak ada simbol $ if(session_is_registered("welcome"))//Periksa apakah variabel $welcome sudah terdaftar echo "variabel selamat datang telah terdaftar!";
kalau tidak
echo "Variabel selamat datang belum didaftarkan!";
?>
</body></html>
Untuk menyesuaikan pemrosesan sesi di php4,
kita perlu memperluas 6 fungsi:
·sess_open($sess_path, $session_name);
Fungsi ini dipanggil oleh pengendali sesi untuk inisialisasi.
Parameter $sess_path sesuai dengan opsi session.save_path di file php.ini. Parameter $session_name sesuai dengan opsi session.name di php.ini.
·sess_close();
Fungsi ini dipanggil ketika halaman berakhir eksekusi dan pengendali sesi perlu ditutup.
·sess_read
($key);
). Data sesi $key. (Catatan: Serialisasi adalah teknologi yang menyimpan variabel atau objek dalam file di akhir program atau saat diperlukan, dan kemudian mentransfernya ke memori saat program dijalankan atau diperlukan di lain waktu. Itu berbeda dengan metode hanya menyimpan data. )
·sess_write($key, $val);
Fungsi ini dipanggil ketika pengendali sesi perlu menyimpan data, yang sering terjadi di akhir program. Ia bertanggung jawab untuk menyimpan data di tempat yang dapat diambil di lain waktu menggunakan fungsi sess_read($key) .
·sess_destroy($key);
Fungsi ini perlu menghancurkan sesi. Ia bertanggung jawab untuk menghapus sesi dan membersihkan lingkungan.
·sess_gc($maxlifetime);
Fungsi ini bertanggung jawab untuk membersihkan fragmen. Dalam hal ini, ia bertanggung jawab untuk menghapus data sesi yang sudah ketinggalan zaman. Pengendali sesi memanggil mereka sesekali.
Program kustom dapat menggunakan database mysql atau file DBM untuk menyimpan data sesi, bergantung pada situasi spesifik. Jika Anda menggunakan mysql untuk dukungan, Anda perlu melakukan langkah-langkah berikut:
Pertama membuat database sesi di mysql dan membuat tabel sesi:
mysql> BUAT sesi DATABASE;
mysql>HIBAH pilih, sisipkan, perbarui, hapus sesi ON.* KE phpsession@localhost
-> DIIDENTIFIKASI OLEH 'phpsession';
mysql> BUAT sesi TABEL (
-> sesskey char(32) bukan nol,
-> kadaluwarsa int(11) tidak ditandatangani bukan nol,
-> nilai teks bukan nol,
-> KUNCI UTAMA (kunci sess)
-> );
Selanjutnya, ubah variabel $SESS_DB* di file session_mysql.php agar sesuai dengan pengaturan database di mesin Anda:
<?
$SESS_DBHOST = "localhost"; /* Nama host basis data*/
$SESS_DBNAME = "sesi"; /* nama basis data*/
$SESS_DBUSER = "phpsession"; /* Nama pengguna basis data*/
$SESS_DBPASS = "phpsession"; /* Kata sandi basis data*/
$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
......//Fungsi yang disesuaikan
session_set_save_handler( "sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>
Sesuaikan antarmuka saat menggunakan file dbm:
<?
$SESS_DBM = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
......//Fungsi yang disesuaikan
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>
Kode pengujian khusus sesi:
<?php
…
if ($handler == "dbm") include("session_dbm.php");//Antarmuka mana yang akan digunakan
elseif ($handler == "mysql") include("session_mysql.php");
lain…
session_start();
session_register("hitungan");
…
?>
Bagaimana cara menggunakan Sesi dalam autentikasi?
Sesi dapat digunakan untuk otentikasi pengguna:
verifikasi apakah pengguna tersebut sah:
<?
sesi_mulai();
……//Proses verifikasi session_register("reguser");
?>
Periksa apakah pengguna masuk di halaman lain
<?
sesi_mulai();
if(isset($reguser)&&$reguser!=""){//Jika Anda sudah login echo "Pengguna yang terhormat, selamat datang";
}else{//Jika Anda belum login echo "Silakan daftar dulu!";
}
?>
Pengguna logout:
<?
sesi_penghancuran();
…
?>
Bagaimana cara menerapkan beberapa sesi yang berjalan secara bersamaan?
Pertanyaan: Saat saya menulis sistem pembelian, penjualan, dan inventaris untuk unit saya, saya menemukan bahwa beberapa pengguna perlu masuk ke aplikasi PHP secara bersamaan. ID sesi unik statis yang awalnya dirancang menyebabkan kebingungan data. Dengan cara ini, menghasilkan ID sesi unik secara dinamis menjadi prioritas utama.
Solusinya sederhana: Saya menggunakan nama file php + stempel waktu sebagai ID sesi unik sehingga setiap sesi dalam program saya ada pada tempatnya dan tidak ada lagi kebingungan.
Saya akan mempublikasikan source code saya di bawah ini agar teman-teman yang mempunyai masalah yang sama dapat menemukan solusinya.
//Mulai sesi PHP untuk mempertahankan variabel.
if (kosong($namasesi saya)) {
$mikro = waktu mikro();
$micro = str_replace(" ","",$micro); // hapus bagian yang kosong
$micro = str_replace(".","",$micro); // hapus titik
$namasesisaya = "po_maint" $mikro;
}
session_name($namasesisaya);
session_start();
Catatan program:
Gunakan mysessionname untuk meneruskan variabel untuk nama sesi unik antar halaman. Mysessionname tidak boleh menjadi nama variabel internal sesi karena sudah ada sebelum sesi dimulai. Mysessionname tidak dapat disimpan dalam mode cookie, karena beberapa sesi pasti akan menimpa file cookie asli. Anda dapat menyimpannya menggunakan kolom formulir tersembunyi. Maka tidak akan ada masalah.