HowToCode

პროგრამირების შესასწავლი უფასი ვიდეო გაკვეთილები ქართულად

cookie-ებთან მუშაობა php-ში

ამ ბოლოს სულ თეორიულ რაღაცებზე ვწერ/ვსაუბრობ ხოლმე. რეალობას ძალიან რომ არ მოვწყდეთ დღეს პატარა პრაქტიკულ პოსტს შემოგთავაზებთ, მითუმეტეს რომ აღნიშნულ თემაზე ერთ-ერთმა მკითხველმა მთხოვა დაწერა.

დარწმუნებული ვარ ისეთ საბაზისო საკითხზე როგორიც არის cookie-ები ბევრს ნახავთ, ბევრიც მომავალში დაიწერება. თუმცა ჩემის მხრივ მეც გადავწყვიტე რომ მშობლიურ ენაზე მიმეწვდინა ხმა ისეთ დამწყებებთან, რომლებმაც ჯერ არ იციან ეს რა არის.

აი როცა ავტორიზაციას გაივლი საიტზე და აჭერ ღილაკზე (remember me), მეორე დღეს შედიხარ და ისევ ავტორიზებული ხარ. დიდი შანსია რომ საიტი სწორედ cookie-ებს იყენებდეს. ანუ მარტივად რომ ვთქვათ ეს არის საშუალება ბრაუზერის იდენტიფიცირებისთვის. php-დან შეგვიძლია შევქმნათ cookie, რაც ნიშნავს იმას, რომ სერვერი გაუგზავნის ბრაუზერს გარკვეულ მონაცემებს და მომავალში როცა ბრაუზერი კვლავ მიმართავს სერვერს, უკან გააყოლებს იმ მონაცემებს რაც თან ახლდა "ქუქის". მათი ტრანსპორტირება ხდება ორმხრივ სერვერიდან კლიენტისკენ (ბრაუზერისკენ) და პირიქით. ახლა ვნახოთ კოდის ფრაგმენტებიც.

"ქუქის" შესაქმნელად არსებობს setcookie ფუნქცია, რომელიც ზოგადი ფორმით ასე გამოიყურება:

// ზოგადი ფორმით
setcookie($name, $value, $expire, $path, $domain, $security, $httponly);

აღსანიშნავია ისიც, რომ აუცილებელია მისი გამოძახება მანამ, სანამ მოხდება რაიმე სახის აუთფუთის გაგზავნა კლიენტის მხარეს. ანუ სანამ პირველ echo-ს დაწერთ, მანამდე უნდა გამოიყენოთ. ის იგზავნება HTTP ჰედერებთან ერთად. ახლა განვიხილოთ პარამეტრები სათითაოდ:

$name - "ქუქის" სახელი, რომლის მეშვეობითაც სამომავლოდ ამოვიღებთ მასში ჩაწერილ მნიშვნელობას

$value - ტექსტური ინფორმაცია რაც ინახება $name-ის შესაბამის "ქუქიში". აი მაგალითად თუკი სახელია mycookie, მის მნიშვნელობას php-ს სკრიპტიდან ამოვიღებთ შემდეგნაირად $_COOKIE['mycookie']

$expire - თარიღი, რა დრომდეც არის აქტიური. თუკი გვინდა რომ აქტიური იყოს 30 დღის განმავლობაში შეგვიძლია გამოვიყენოთ time() ფუნქცია, მიმდინარე დროის გასაგებად წამებში და დავუმატოთ 60*60*24*30 (60 - წამი, გამრავლებული 60-ზე ეს არის ერთი საათი, გამრავლებული 24-ზე, ეს უკვე ერთი დღეა და ბოლოს გამრავლებული 30-ზე ეს უკვე 30 დღეა). ანუ, თუკი ავიღებთ ასეთ მნიშვნელობას time()+60*60*24*30 აქტიური იქნება 30 დღის განმავლობაში. თუკი ჩავწერთ აქ 0-ს მაშინ "ქუქი" გაუქმდება ბრაუზერის დახურვისთანავე.

$path - მისამართი სერვერზე, რომლისთვისაც ხელმისაწვდომი იქნება ეს ჩანაწერი.

$domain - დომენი, რომლისთვისაც ვქმნით ჩანაწერს

$security - ინდიკატორი, რომლის მეშვეობითაც განისაზღვრება გაიგზავნოს თუ არა "ქუქი" დაცული HTTPS კავშირის არხით კლიენტიდან. ამის გამოყენება შესაძლებელია მაშინ თუკი ასეთი არხი არსებობს.

$httponly - როგორც დოკუმენტაციაში წერია ეს პარამეტრი დაემატა PHP 5.2.0- ვერსიიდან. თუკი აქ გადვცემთ true მნიშვნელობას, "ქუქი" ხელმისაწვდომი იქნება მხოლოდ http პროტოკოლით. რაც ნიშნავს იმას რომ მის მნიშვნელობას javascript-იდან ვერ ამოვიღებთ.

პრაქტიკიდან გეტყვით, რომ ყველაზე აქტიურად პირველ სამ პარამეტრს ვიყენებ, ყოფილა შემთხვევები როცა path და domain-იც დამჭირვებია. თუმცა ბოლო ორ პარამეტრს რაც შეეხება, არასდროს გამომიყენებია.

cookie-ებით მანიპულირება შეიძლება setcookie ფუნქციისთვის სხვადასხვა პარამეტრების გადაცემით. აი მაგალითად, თუკი წაშლა გვსურს expire პარამეტრში მივუთითებთ წარსულის რომელიმე თარიღს

// mycookie - დასახელებაა
setcookie('mycookie', '', time() - 3600);

ან თუკი უკვე არსებულის განახლება გვსურს:

// mycookie - დასახელებაა
setcookie('mycookie', 'აქ ახალი მნიშვნელობა', time()+60*60*24*30);

//
//

როგორც უკვე ზევით აღვნიშნე, cookie-ს მნიშვნელობების ამოსაღებად გამოიყენება $_COOKIE მასივი. შემდეგი კოდის ფრაგმენტი შეამოწმებს, არსებობს თუ არა mycookie და თუ არსებობს დაბეჭდავს:

// isset-ით შემოწმება
if(!isset($_COOKIE["mycookie"])) {
	echo "არ არსებობს";
} else {
    echo "არსებობს '" . $_COOKIE["mycookie"] . "'";
}

სამომავლოდ სესიებზეც დავწერ