Php cookie hayoti. PHP da seans davomida cookie fayllari qanday qayta ishlanadi? Sessiya fayllarini qanday saqlash kerak

Golovna / Corisna haqida ma'lumot

Xo'sh, keling, bilib olaylik.

Boshlash uchun xuddi shu wiki-da HTTP haqida o'qing. To'liq bilish shart emas, faqat so'rovlar/ta'minotlar tuzilishini minimal darajada tushunish, so'rovlar/jumlalar nimani o'z ichiga olganligini, sarlavhalar va asosiy matnni tushunish uchun (tana so'rov/ta'minot turiga kirmasligi mumkin).

Shunday qilib, eksa. Cookie-fayllar. Cookie-fayllar brauzer orqasida yashaydi. Xushbo'y hid HTTP sarlavhasi orqali serverga uzatiladi (xabar siz rasmlarni ko'rib chiqdingiz). Ê faqat cookie-fayllar, ê faqat http-faqat kukilar. Cookie-fayllarni xost va marshrut bo'yicha ajratish mumkin. Bularning barchasi bizga sezgirlikni beradi va jinsiy aloqada yordam beradi. PHP $_COOKIE o'rniga SAPI dan foydalanadi. Agar PHP so'rovni qayta ishlashni qabul qilsa, vikorista SAPI (php-fpm, cgi, mod_php SAPI ning o'z ilovalarini yaratadi) endi so'rovning sarlavhalari va tanasini oladi, ularni tahlil qiladi va $_SERVER, $ tipidagi barcha super-global massivlarni saqlaydi. _GET va shu jumladan $_COOKIE. Mijoz bizga yuboradigan hamma narsa (biz qilishimiz kerak bo'lgan narsa mijozdan so'rash, ular qanday jarayonlar server ekanligini) va brauzer bizga cookie-fayllarni yuboradi, biz so'rov qo'llaniladigan joydan qila olamiz. Cookie-fayllar ulanishda Set-Cookie sarlavhasi yordamida o'rnatiladi, shuning uchun bu erda PHP haqida emas, balki HTTP haqida o'qish kerak. PHP sizga qo'lingizdan kelganini qilish imkonini beradi. Siz qo'shimcha sarlavha funksiyasidan foydalanib, to'g'ridan-to'g'ri tasma sarlavhalaridan cookie-fayllarni tarmoqlashingiz mumkin. Bundan tashqari, agar siz cookie-fayllarning ishlash muddatini 0 ga qo'ysangiz, brauzer yopilganda cookie-fayllarning o'zi o'chirilmaydi, chunki bunday cookie-fayllarning barchasi unutiladi.

Eksa... seanslar... PHP seanslari uchun ushbu faylni chaqiring. Tasodifiy nomlardan har qanday fayl. Aytaylik, session.autostart php.ini-da ko'rsatilgan yoki siz session_start tugmasini bossangiz, foydalanuvchi seansi ostida fayl yaratiladi (siz uni turp yoki memkeshga ko'chirishingiz mumkin, sizning ehtiyojlaringizga qarab xotirangiz va hokazo.). Shunday qilib, ma'lumotlarning o'zi shifrlangan bo'lishi mumkin, shuning uchun siz kutishingiz mumkin). Bu faylning identifikatori bor, shunchaki tasodifiy qator. Va agar so'rovni ko'rib chiqish vaqtida oldingi so'rovdagi sessiya topilmasa, yangisi yaratiladi.

Va biz oxiriga keldik - PHP seansni old tomondan ipga qanday bog'laydi. Va bu erda hamma narsani tugatish oson - kukilar. Seans boshlanganda, avtomatik ravishda faqat http tarmog'i yaratiladi (odamlar JS-dan bizning sessiyamizdan xalos bo'lolmasligi uchun) seans identifikatori yozib olinadi. Brauzerni tuzatuvchida sizda PHPSESSID cookie fayli mavjudligini sezishingiz mumkin (ism sozlamalarda o'zgartirilishi mumkin va kelajakda seanslar nafaqat cookie-fayllar orqali bog'lanishi, balki xavfsizlik bilan ham boshqarilishi mumkin), agar siz seans bilan tajriba o'tkazsangiz. yami.

Agar sizdan SAPI so'rasa, session.autostart mavjud bo'lsa, yangi seans yaratishni boshlashdan oldin siz hali ham sessiya identifikatori bilan bizda nima borligi haqida o'ylaysiz, kimdirda bor yoki yo'qligini va u qanday tinchlanishini va qanday qilib yaratmasligini tekshirib ko'ring. yangisi. Seans cookie-fayllar orqali bog'langan ekan, siz cookie-faylning ishlash muddatini o'rnatishingiz mumkin (php.ini-da) va shu bilan seansning ishlash muddatini tartibga solishingiz mumkin.

Axis... qachon cookie-fayllardan foydalanasiz va seanslar haqida nima deyish mumkin? Shuni tushunish kerakki, cookie-fayllar qancha ko'p ma'lumotlarga ega bo'lsa (va hid so'z bilan cheklanishi mumkin) - biz teriga shunchalik ko'p ma'lumot uzatamiz. Agar siz 1 kilobayt ma'lumotni olib tashlashingiz va sarlavhalardagi cookie-fayllarga bir necha kilobayt o'tkazishingiz kerak bo'lsa, bu unchalik yaxshi emas. Optimallashtirishga qiziqqan odamlar trafik va paketlar miqdorini kamaytirish uchun tasvirlarni cookie-fayllarsiz boshqa domenlarda saqlaydilar (shunday qilib oddiy HTTP bitta TCP paketi hajmiga aralashishga majbur bo'ladi). Agar siz JS-dan ushbu ma'lumotlar bilan istalgan sahifada ishlashingiz kerak bo'lsa, masalan, tarjimalarni JS-ga qo'yish uchun mahalliy til dasturchi tomonidan tanlanadi, u holda siz cookie-fayllardan foydalanishingiz mumkin. Boshqa har bir narsa uchun g'alaba seansini o'tkazish yaxshiroqdir. Siz ko'proq ishlay olmaysiz, shuning uchun kob bosqichlarida yollang.

Shu bilan birga, bu $_SESSION PHP-o'zgarishlarining samaradorlik davri va natijada veb-qo'shimchalarning faolligi. Misol uchun, agar foydalanuvchi tizimga kirgan bo'lsa, u ushbu parametrda login va parolni qayta kiritmasdan bir soat davomida ishlay olmaydi.

Shoshmoqda turli yo'llar bilan bu kun uchun hayot soatini belgilash. Keling, dumbaga ko'nikishga harakat qilaylik operatsion tizim Linux.

Hayot soatini qanday bilish mumkin

Sozlashdan oldin, ishlab chiqarish tegirmoniga qarang. Pul topishning bir qancha usullari mavjud:

1. php buyrug'i yordamida serverda

php-i | grep sessiyasi

Seans uchun parametrlar ro'yxatini tanlashingiz mumkin. Bizni qitiqlang:

  • session.cookie_lifetime => 0 => 0
  • session.gc_maxlifetime => 1440 => 1440

Bu ma'no - yuvish ortidagi ma'no. cookie_lifetime => 0 brauzerni yopishdan oldin cookie fayllari faoliyati haqida gapiring, agar siz ushbu parametrni qiymatga o'rnatsangiz, faol seans paytida sessiya to'xtatiladi yoki yaxshisi, qiymatni nolga qo'ying.

2. Qo'shimcha yordam uchun ini_get php funksiyasidan foydalaning

$maxlifetime = ini_get("session.gc_maxlifetime");
$cookielifetime = ini_get("session.cookie_lifetime");

Echo $maxlifetime;
echo $cookielifetime;

systemctl qayta ishga tushiring apache2 || systemctl httpd-ni qayta ishga tushiring

* tizimsiz Linux versiyalari uchun buyruq vikorista apache2 xizmatini qayta ishga tushiring yoki yana httpd xizmatini qayta ishga tushiring.

FastCGI (PHP-FPM) natijasida:

.htaccess fayli orqali moslashtirish

Bu fayl webmasterga veb-serverning turli parametrlarini boshqarish imkonini beradi. Buni tahrirlash uchun siz saytdagi fayllarga kirishingiz kerak. Men usulni tushuntira olmayman, chunki PHP protsessorini Apache qo'llab-quvvatlamaydi, lekin, masalan, NGINX + PHP-FPM. Men bu erda xuddi shu usuldan foydalanmoqchiman (quyida ko'proq).

.htaccess fayliga quyidagilar kiritiladi:

php_value session.gc_maxlifetime 86400
php_value session.cookie_lifetime 0

* Qayd qilganingizdek, parametrlar php.ini orqali sozlangandagi kabi.

Yuqorida aytib o'tilganidek, usul yaratilmaydi, chunki Apache g'alaba qozonmaydi. Biroq, o'rnatish serverda tizimdan chiqishi mumkin (yana shaxsiy kirish huquqiga egamiz).

Biz veb-server konfiguratsiya faylini ochamiz, masalan, php-fpm:

vi /etc/php-fpm.d/www.conf

va tahrirlash/qo'shish mumkin:

php_qiymati = 86400
php_value = 0

Xizmatni qayta ishga tushirgandan so'ng:

systemctl php-fpm ni qayta ishga tushiring || php-fpm xizmatini qayta ishga tushiring

Dastur kodida parametrni o'rnatish

Seans davomida aybdor onaning portali turli vaqtlarda bo'lsa, usul boshqacha bo'lishi mumkin. Buning uchun PHP ini_set va session_set_cookie_params funksiyalaridan tezda foydalanishingiz mumkin, masalan:

Ini_set("session.gc_maxlifetime", 86400);
ini_set("session.cookie_lifetime", 0);
session_set_cookie_params(0);

Session_start();

Seans tugaguncha funksiyalar chaqirilishi kerak (session_start).

Qo'shimchada seanslarni o'rnatish

Bir nechta dasturlar sozlamalarni o'zgartirishi mumkin. Bunday holda, dastur parametrlarida sessiya soatini belgilashingiz kerak. Teri dasturida o'z tuzatishlari mavjud, siz o'zingiz o'rganishingiz kerak. Keling, CMS Bitrix bilan sessiya o'rnatamiz.

Keling, boraylik Koristuvachlar guruhlari- guruhni tanlang - Xavfsizlik. Biz "Seansning hayot soati (Xvylin)" parametrini bilamiz va soatni o'rnatamiz, masalan, 1440 (Xvylinda 24 yil).

Seanslarni avtomatik ravishda qanday davom ettirish kerak

Seans qanday paydo bo'ladi kuylash davri va ichida tugaydi qo'shiq soati Bu koristuvachning faol sessiyasini to'xtatishdan oldin amalga oshirilishi mumkin. Bu ancha qulayroq, chunki sahifa yangilanganda seans soati avtomatik ravishda davom ettiriladi. Buning uchun cookie_lifetime parametri muhim bo'lib, u asosan barcha ilovalarda 0 ga o'rnatilgan.

Agar cookie_lifetime 86400 qiymatini o'rnatsak, sessiya 24 yildan keyin to'xtatiladi. Buni noto'g'ri tushunmang.

Seanslarni nazorat qilish va to'xtatib turish zarurati tug'ilsa, siz php funksiyasini tezlashtirishingiz mumkin session_destroy().

Sessiya fayllarini qanday saqlash kerak

Seans fayllari saqlanadigan joy parametr bilan belgilanadi session.save_path Hayotning soati ham shunday. Umovchannyam uchun siz yo'lni kuzatishingiz mumkin /var/lib/php/sessions.

Bu muhim parametr - veb-server ushbu katalogga yozish huquqiga ega emasligi sababli, bu seanslarni saqlashni imkonsiz qiladi, bu esa robot dasturidan nomaqbul natijalarga olib kelishi mumkin.

Cookie-fayllar brauzer tomonidan ma'lumotlarni saqlash mexanizmidir masofaviy kompyuterdan veb-sahifa sozlamalarini aylantiruvchi va saqlaydigan spinnerlarni aniqlash (masalan, o'zgaruvchan).

Keling, ma'lum bir ilovada "Cookie" viki-fayllarini ko'rib chiqaylik.

Aytaylik, saytga xabar yozishimiz kerak. Biz saytning qancha qismi terining o'ziga xos sharoitlaridan ta'sirlanganligini bilishimiz kerak.

Ushbu talabga ikki yo'l bilan erishish mumkin. Birinchisi, egalarining IP manzili. Kimlar uchun bir nechta jadvalga ega bo'lgan ma'lumotlar bazasi talab qilinadi, ularning taxminiy tuzilishi quyidagicha:

Foydalanuvchi saytga kirganda, biz uning IP-manzilini topishimiz, ma'lumotlar bazasidan yo'llanma haqida ma'lumot topishimiz, shifokorni kengaytirishimiz va uni brauzerda ko'rsatishimiz kerak. Bunday protsedura uchun skript yozish qiyin. Biroq, ushbu usuldan foydalanganda biz haqoratli xarakterdagi muammolarga duch kelamiz:

  • Har bir IP-manzilni bitta jadvalga kiritish kerak, bu juda katta bo'lishi mumkin. Va bundan biz protsessor vaqti va disk maydonidan noratsional foydalanayotganimizni ko'ramiz;
  • Ko'pgina uy kompyuterlarining IP manzillari dinamikdir. Bugun manzil 212.218.78.124, ertaga esa 212.218.78.137. Shu tarzda, bir koristuvachni bir necha marta aniqlashning katta imkoniyati mavjud.

Siz boshqa usulni tanlashingiz mumkin, uni amalga oshirish ancha oson va samaraliroq. Biz Cookie-ga o'zgartirishni o'rnatamiz, shunda u diskda saqlanadi uzoq koristuvachdan. Buni o'zgartirish mumkin va biz yozuvlar haqidagi ma'lumotlarni saqlab qolamiz. Serverga yuborilganda u skript hisoblanadi. Ushbu identifikatsiya usulining afzalliklari aniq. Birinchidan, biz IP manzillar haqida hech qanday keraksiz ma'lumotni saqlashimiz shart emas. Aks holda, bizda dinamik IP manzillar yo'q, sizning faoliyatingiz haqidagi ba'zi ma'lumotlar har bir saytda saqlanadi.

Endi biz nima uchun Cookie-fayllardan foydalanishimiz mumkinligi aniq bo'ldi - sayt mijozidan (obunachisidan) ozgina ma'lumotni saqlash uchun, masalan: saytni sozlash (sahifalar fonining rangi, tili, jadval dizayni va boshqalar) í ma'lumot .

Cookie-fayllar eng muhim hisoblanadi matnli fayllar, ular reklama saytlarining diskida saqlanadi. Cookie-fayllar server tomonidan saqlangan ma'lumotlarni saqlaydi.

Cookie-fayllarni dasturlash

Cookie-fayllarni dasturlashni boshlaylik.

Cookie-fayllarni o'rnatish uchun Vickory funksiyasidan foydalaning SetCookie(). Ushbu funktsiya uchun siz oltita parametrni belgilashingiz mumkin, ulardan biri majburiydir:

  • nom - Cookie-ga tayinlangan nomni (qatorni) belgilaydi;
  • qiymat - o'zgarish (qator) qiymatini hisoblab chiqadi;
  • tugash - birjaning "hayoti" soati (butun son). Yakshcho Daniya parametri Agar ko'rsatmasangiz, Cookie seans oxirigacha yoki brauzer yopilgunga qadar "yashaydi". Agar soat ko'rsatilgan bo'lsa, u kelganda Cookie yo'qoladi.
  • yo'l - Cookie-ga yo'l (qator);
  • domen - domen (qator). Qiymat Cookie o'rnatilgan xost nomiga o'rnatiladi;
  • xavfsiz - xavfsiz HTTPS ulanishi orqali cookie-fayllarni uzatish.

Faqat dastlabki uchta parametrdan foydalanganingizga ishonch hosil qiling.

Butt o'rnatish kukilari:



SetCookie("Test", "Qiymat");

// O'rnatishdan keyin bir yil davomida Cookie-ni o'rnating:
SetCookie("Mening_cookie", "Qiymat", time()+ 3600);

?>

Cookie-fayllardan foydalanganda, ma'lumot brauzerga yuborilishidan oldin (masalan, echo operatori yoki biron bir funktsiya tomonidan) cookie-fayllar o'rnatilishi kerakligini bilishingiz kerak. Shuning uchun, cookie-fayllarni skriptga o'rnatish yaxshidir. Cookie fayllari server sarlavhasi orqasida o'rnatiladi va agar skript chop etilsa, bu hujjatning asosiy qismi boshlanadi degan ma'noni anglatadi. Natijada, cookie fayllari o'rnatilmaydi va keyinroq ko'rsatilishi mumkin. Cookie-fayllarni o'rnatish muvaffaqiyatini tekshirish uchun siz quyidagi usuldan foydalanishingiz mumkin:

// Seans oxirigacha Cookie-ni o'rnating:
// Agar Cookie muvaffaqiyatli o'rnatilgan bo'lsa, SetCookie funksiyasi TRUE qiymatini qaytaradi:
"

Cookie-fayllar muvaffaqiyatli o'rnatildi!

" ;
?>

Funktsiya SetCookie() Cookie muvaffaqiyatli o'rnatilgan bo'lsa, TRUE qiymatini o'rnatadi. Cookie-ni sozlash mumkin bo'lmagan hollarda, SetCookie() FALSE va, ehtimol, oldindan (saqlanishi kerak) PHP-ni sozlash). Yaqinda cookie-fayllarni o'rnatishga misol:

// Cookie-fayllar o'rnatilmaydi, yuborishdan oldin bo'laklar bo'ladi
// Cookie sarlavhasi brauzerda "Salom" qatorida ko'rsatiladi:
echo "Salom";
// SetCookie funksiyasi FALSE ga aylanadi:
agar (SetCookie("Test", "Qiymat")) aks-sado "

Cookie muvaffaqiyatli o'rnatildi!

" ;
boshqa aks-sado "

Cookie o'rnatilmadi!

"
;
// "Cookie o'rnatib bo'lmadi!".
?>

Cookie o'rnatilmagan, shuning uchun cookie sarlavhasini yuborishdan oldin brauzerda "Salom" qatorini ko'rsatdik.

Cookie ma'nosini o'qing

Cookie-fayllarga va ularning ma'nolariga kirishni rad etish oson. Xushbo'y hidlar $_COOKIE va $HTTP_COOKIE_VARS superglobal massivlarida saqlanadi.

Qiymatga kirish nomga ta'sir qiladi cookie fayllarini o'rnatish, masalan:

echo $_COOKIE["mening_cookie"];
// O'rnatilgan "My_Cookie" cookie-faylining qiymatini ko'rsatish

Butt o'rnatish Cookie va keyingi yogo o'qish:

// Bir yil davomida "Salom" qiymatlari bilan "test" cookie faylini o'rnating:
setcookie("test", "Salom", time() + 3600);
// Skriptni ishga tushirishda "Salom" ni ko'rsating:
echo @$_COOKIE ["test"];
?>

Ushbu ilovada skript birinchi marta bajarilganda, Cookie "testi" "salom" qiymatlari bilan o'rnatiladi. Skriptni qayta ishga tushirganingizda, Cookie qiymati "test" ko'rsatiladi, keyin esa "Salom" qatori paydo bo'ladi.

Cookie-fayllarning ma'nosini o'qiyotganda, cookie-fayllarning kelib chiqishini tekshirishga ehtiyot bo'ling, masalan, vikoryst operatori isset(). Yoki operator tomonidan avf etilgan videoni bo'g'ish usuli @

Va eksa dumba, yordam Cookie uchun saytni ko'rish uchun shifokor olish uchun qanday:

// "Mortal" Cookie allaqachon o'rnatilganligini tekshiring,
// Agar shunday bo'lsa, biz uning ma'nosini o'qiymiz,
// Va tabibning qiymati yon tomonga oshadi:
agar (isset ($_COOKIE ["Mortal"])) $ cnt = $_COOKIE ["Mortal"] + 1;
Aks holda $cnt = 0;
// "Mortal" cookie-faylini tabibning qiymatlariga ko'ra o'rnating,
// 18.07.29gacha bir soatlik "hayot" ichida,
// Ko'p vaqt o'tdi:
setcookie("Mortal", $cnt, 0x6FFFFFFFF);
// Ushbu tomonning miqdorini ko'rsatish:
aks-sado "

Siz bu tomonni ko'tardingiz " [elektron pochta himoyalangan]$_COOKIE ["O'lik"]. " bir marta

" ;
?>

Vidalennya kukilari

Ba'zan bu o'chirilgan cookie-fayllarga bo'lgan ehtiyojga to'g'ri keladi. Buni qilish oson emas, faqat bir xil nomlar va bir xil parametrlar bilan Cookie-ni qayta o'rnatishingiz kerak. Masalan:

// "Test" ko'rinadigan cookie-fayl:
SetCookie("Test", "");
?>

Cookie-fayllar qatorini sozlash yoga o'qish zali

Cookie-fayllar nomlariga Cookie-fayllar massivi, vikorista va kvadrat qoʻllarni kiritishimiz va keyin ushbu massivdan Cookie-fayllar qatorini oʻqishimiz mumkin:

// Cookie-fayllar qatorini o'rnating:
setcookie ("cookie", "Birinchi");
setcookie("cookie", "Boshqa");
setcookie ("cookie", "Uchinchi");

// Sahifaga qayta tashrif buyurganimizdan so'ng biz ko'rishimiz mumkin
// Ombor massivi Cookie fayllari "cookie":
agar (isset ($_COOKIE ["cookie"])))) (
foreach ($_COOKIE["cookie"] sifatida $name => $value) (
echo "$ nomi: $ qiymat
" ;
}
}
?>

Wikoristan cookie-fayllarining afzalliklari taqiqlanmagan. Biroq, bu muammolar bir xil emas. Avvalo, ular haydovchining qabul qilishni to'sib qo'yishi mumkinligiga ishonishadi Brauzer orqali cookie fayllari Yoki barcha cookie-fayllarni yoki ulardan ba'zilarini o'chirib tashlang. Shunday qilib, biz bunday firibgarlarni aniqlash orqali ko'plab muammolarni hal qilishimiz mumkin.



<<< Назад Zmist Oldinga >>>
Tushunmasdan ko'proq oziq-ovqat va hokazo - biz mehr bilan so'raymiz

© 2022 androidas.ru - Android haqida hamma narsa