//Cari skript üçün sessiya məlumatlarını silin: $_SESSION = ; //idinə uyğun kuki silin: @unset($_COOKIE); //sessiya yaddaşını silin: session_destroy();
Bir sessiyanın silinməsinin niyə 3 mərhələyə bölünməsinin lazım olduğunu başa düşmək üçün onun harada və harada saxlandığını anlayaq.
Aydınlıq üçün bütün növ sessiya məlumatlarının saxlandığı bütün yerləri müəyyən edək:
Koterovdan:
Skript başa çatdıqda, PHP avtomatik olaraq $_SESSION massivini müvəqqəti yaddaşda saxlayır, adı SID-də saxlanılır.
massivdən verilənlərin yaddaşa yazılması deməkdir $_SESSION, içində hər hansı varsa.
Bunlar. deyə bilərik ki:
Əgər session_destroy()çağırılmayacaq və kukilər silinməyəcək, sonra skript yenidən işə salındıqda, əvvəllər ona yazılmış yaddaşdan məlumatlar görünəcək. $_SESSION, skripti işlədərkən belə, əl ilə daxil edin $_SESSION onları əlavə etməyəcəksiniz.
// Cari skriptdə seans məlumatlarını təmizləmək üçün bu sətri yazırıq $_SESSION = ; //Bu sətir SID silir @unset($_COOKIE); //Sessiya yaddaşını silir: session_destroy();
İnternetdə seansların nə olduğu, nə üçün olduğu və onlarla necə işləmək barədə minlərlə dərslik tapa bilərsiniz. Ancaq təəssüf ki, onları oxuduqdan sonra bir çox suallar hələ də qalır. Məncə, hər şeyi başa düşməyin ən asan yolu seansların necə işlədiyinə daxildən baxmaqdır. Bunlar. brauzer və veb server mübadiləsi qeydlərini öyrənin, həmçinin müştəri tərəfində və server tərəfində hansı məlumatların saxlandığına baxın.
Bundan sonra bir çox məqamlar daha aydın olur və iş mexanizminin özü daha şəffaf olur.
Aşağıdakı standart skriptdən istifadə edərək sessiyaların işini öyrənəcəyik:
Bu belə işləyir:
Blok 1. session_start() funksiyası PHPSESSID unikal sessiya identifikatorundan istifadə edərək yeni sessiya yaradır və ya köhnəni yükləyir.
Blok 2.Əgər sessiya bərpa olunubsa, $_SESSION["baxış"] dəyəri bir artır. Əgər yoxsa, o, birinə işə salınır.
Nəzəriyyə olaraq, brauzerdə kuki dəstəyi aktivləşdirilibsə, mexanizm işləməli və səhifə hər dəfə yeniləndikdə sayğac dəyəri bir artacaq.
Brauzer orijinal sorğuda heç bir şəkildə özünü müəyyən etmədi, buna görə də mexanizm PHP seansları yeni unikal sessiya identifikatoru yaratdı və brauzerə eyni identifikatorun saxlanacağı kuki yaratmağı əmr etdi.
Skriptin server tərəfində işləməsi nəticəsində aşağıdakı məzmunlu sess_k33en6ccgcia7125mitj5te4u6 faylı yaradılır:
Müştəri tərəfində unikal sessiya identifikatorunun dəyərini saxlayan PHPSESSID kukisi yaradılır.
Qeyd. Defolt PHP parametrləri ilə PHPSESSID kukisinin ömrü brauzer bağlanana qədərdir. Bunlar. brauzer bağlanan kimi kuki silinəcək və sessiya itiriləcək. PHPSESSID kukisinin istifadə müddəti session.cookie_lifetime dəyərini dəyişdirməklə dəyişdirilə bilər.
Brauzer PHPSESSID kukisini veb serverə göndərir, ondan istifadə edərək PHP $_SESSION massivini sess_k33en6ccgcia7125mitj5te4u6 faylının qiymətləri ilə inisiallaşdırır. Müvafiq olaraq, 2-ci blokda IF (birbaşa) filialı işlənir.
Skriptin işləməsi nəticəsində sess_k33en6ccgcia7125mitj5te4u6 faylının məzmunu dəyişir:
Müştəri tərəfində heç nə dəyişmir.
Brauzer bağlanmazdan əvvəl sonrakı səhifə yükləmələri, ikinci skript yükləməsinin necə işlədiyi kimi işləyəcək.
Çünki Kuki-nin ömrü cari brauzer seansı ilə məhdudlaşdırıldığından, o bağlandıqdan sonra unikal sessiya identifikatoru itiriləcək və yenidən işə salındıqda proses yenidən başlayacaq.
Bununla belə, PHPSESSID-i skript parametri kimi açıq şəkildə göstərsəniz, yadda saxlanmış sessiyaya qayıda bilərsiniz:
Sessiyaya qayıtmaq kifayət qədər şərtlidir, çünki... Skriptin işləməsi nəticəsində bu halda kuki yaradılmır. Server cavab başlıqları:
HTTP/1.1 200 OK Tarix: Cümə axşamı, 29 Sentyabr 2011 21:01:52 GMT Server: Apache/2.2.13 (Win32) PHP/5.2.10 X-Powered-By: PHP/5.2.10 Bitmə vaxtı: Cümə axşamı, 19 Noyabr 1981 08:52:00 GMT Keş-nəzarət: mağaza yoxdur, keş yoxdur, yenidən təsdiq edilməlidir, yoxlanışdan sonra = 0, əvvəlcədən yoxlama = 0 Praqma: keşsiz Məzmun uzunluğu: 58 Canlı saxla: vaxt aşımı = 5, maks=100 Əlaqə: Canlı Məzmun-Tip: mətn/html
Bunlar. Bu xüsusi sessiya ilə işləmək üçün bütün keçidlər təyin edilməlidir?PHPSESSID=k33en6ccgcia7125mitj5te4u6.
Qeyd. Siz PHP-yə deyə bilərsiniz ki, kuki vasitəsilə yalnız unikal sessiya identifikatoru keçsin. Bunun üçün siz session.use_only_cookies-i 1-ə təyin etməlisiniz. Bu halda yuxarıda göstərilən hiylə işləməyəcək.
Brauzerdə kukilər söndürülübsə, yuxarıda etdiyimiz kimi, sessiya identifikatorunu parametrlərdən keçirə bilərsiniz. Üstəlik, PHP-də avtomatik olaraq keçidlərə lazımi parametr əlavə edən və formalara gizli sahələr əlavə edən mexanizm var. Əməliyyat prinsipi peçenye ilə eynidır, buna görə də bu işi ayrıca təhlil etməyəcəyik.
Sessiya məlumatları serverdə saxlanılır. Varsayılan olaraq, onlar fayllara yazılır, lakin siz sessiya məlumatlarını saxlamaq üçün öz mexanizminizi təyin edə bilərsiniz (məsələn, verilənlər bazasından istifadə etməklə). Daha ətraflı məlumat istəyirsinizsə, session_set_save_handler funksiyasına baxın.
Unikal sessiya identifikatoru (PHPSESSID) server tərəfindən yaradılır.
Bəli, bu, olduqca mümkündür. Gördüyünüz kimi, PHP fövqəltəbii heç nədən istifadə etmir - identifikator kukilərdən istifadə edərək sorğular arasında saxlanılır, sessiya məlumatları serverdəki fayllarda saxlanılır.
Məsələn, məşhur CodeIgniter çərçivəsinin sessiyalarla işləmək üçün öz mexanizmi var.
Sessiya yalnız unikal sessiya identifikatoru ilə müəyyən edilir, buna görə də ümumiyyətlə təcavüzkar serveri çaşdırmaq üçün onu oğurlamalıdır. Yuxarıda istifadə etdiyimiz test skriptini götürək. Əgər ona başqa İP-dən daxil olarsa (sessiyanı yaradana nisbətən), lakin eyni PHPSESSID ötürülürsə, o zaman sessiya uğurla bərpa olunacaq və sayğac əvvəlki saxlanmış dəyərdən artacaq.
Özünüz əlavə qoruma təmin etməli olacaqsınız. Misal üçün:
Məsələn, istifadəçinin dinamik IP-si varsa və siz avtorizasiyanı saxlamaq üçün seanslardan istifadə edirsinizsə, lakin eyni zamanda IP uyğunluğunu yoxlayırsanız, hər dəfə ünvan dəyişdikdə istifadəçi loqin və şifrəni yenidən daxil etməli olacaq.
Eynilə, İstifadəçi-Agent sətri brauzer versiyasını yeniləyərkən və ya bəzi plaginləri quraşdırarkən dəyişə bilər.
Qeyd. Rəsmi veb saytındakı müzakirəyə inanırsınızsa, identifikatoru yenidən yaradan zaman məlumatlara paralel girişlə bağlı problemlər yarana bilər.
// blok 1
session_start();
əgər(isset($_SESSION[ "başladı" ]))
session_regenerate_id();
başqa
$_SESSION[ "başladı" ] = doğru;
// blok 2
əgər(isset($_SESSION[ "baxışlar" ]))
$_SESSION[ "baxışlar" ]++ ;
başqa
$_SESSION[ "baxışlar" ] = 1;
// blok 3
əks-səda"
<
body>
Baxışların sayı: ". $_SESSION[ "baxış"]."