HowToCode

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

სესიები php-ში

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

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

ახლა წარმოიდგინეთ ონლაინ მაღაზია, სადაც გადიხართ ავტორიზაციას, ათვალიერებთ პროდუქციას, ამატებთ კალათაში, ცვლით არჩეული პროდუქტის რაოდენობას და ა.შ. საქმე ის არის რომ, აქ ყოველი ოპერაცია და მისი შესრულების შედეგი დამოკიდებულია წინაზე. (აი თუკი რომელიმე პროდუქტი ჩავაგდე (პირველი ოპერაცია) კალათაში და შემდეგ კალათის გვერდი ვნახე(მეორე ოპერაცია) იქ უკვე უნდა მიჩვენოს ჩემს მიერ ჩამატებული პროდუქტი.) ამ შემთხვევაში აუცილებელია, რომ სერვერი "ცნობდეს" კლიენტს. სწორედ ამიტომ შემოიღეს სესიები. სესია არის მონაცემთა ერთობლიობა, რომელიც შეიცავს ინფორმაციას მიმდინარე მდგომარეობაზე. მიმდინარე მდგომარეობა კი მაგალითისთვის შესაძლოა აღვწეროთ შემდეგი პარამეტრებით: არის თუ არა მომხმარებელი ავტორიზებული, ვინ არის ეს მომხმარებელი, რა აქვს კალათაში და ა.შ. ზოგადად სესია შეიძლება შეიცავდეს უფრო ბევრ მონაცემს, ეს დამოკიდებულია პროექტსა და ამოცანაზე. ეს მონაცემები ინახება სერვერზე დროებით ფაილში (temp ფაილებს რასაც ეძახიან.)

საბედნიეროდ php-ს აქვს უკვე სესიებთან სამუშაო მექანიზმი ჩაშენებული. ახლა შევეცდები მაქსიმალურად ადეკვატურად აღვწერო და თან პატარა მაგალითიც გიჩვენოთ. ყველაფერი იწყება session_start()-ით, ამ დროს სერვერი აგენერირებს სესიის id-ს (PHPSESSID) და ქმნის მასივს $_SESSION სადაც შევინახავთ ჩვენთვის საჭირო მონაცემებს. როგორც ზევით დავწერე ეს მონაცემები ინახება დროებით ფაილში.

იმისთვის, რომ ეს სესია ხელმისაწვდომი იყოს მოთხოვნებს შორის, php-ს აქვს ორი მეთოდი

  • თუკი მომხმარებელს ჩართული აქვს ქუქის მნიშვნელობების მიღება, მაშინ შეიქმნება ქუქი PHPSESSID სახელით და მისი მნიშვნელობა იქნება სესიის ID. ანუ ესეთ წყვილს მივიღებთ PHPSESSID=რაიმე id;
  • თუ პირველი ვარიანტი არ იმუშავებს, იმის გამო რომ მომხმარებელს გამორთული აქვს ქუქი (რაც ძალიან მეეჭვება). მაშინ php შესაძლოა დავაკონფიგურიროთ ისე, რომ ყოველი ლინკის ბოლოში მიამატოს ზევით აღნიშნული წყვილი PHPSESSID=რაიმე id და ასე $_GET მასივით ხელმისაწვდომი იქნება სესიის id.

ეს მეორე შემთხვევა არ მახსოვს სადმე მენახოს, არც პირადად დამიკონფიგურირებია php, რომ გამომეყენებინოს. გარდა ამისა როგორც გავიგე, უსაფრთხოების თვალსაზრისით ჯობია თავი ავარიდოთ (ამაზე მოგვიანებით დავწერ).

გვეყო თეორია, ვიცი რომ მაგალითები გინდათ. ამიტომ შექმენით ორი ფაილი session.php, session2.php და ჩაყარეთ ერთ ფოლდერში, თვენს xampp-ზე. პირველი ფაილი ასე გამოიყურება:

session_start();

$_SESSION["test"] = "hello world";

echo "sess id: ".session_id();
echo "
"; echo session_save_path();

session_start() - აუცილებელი ფუნქციაა, რომლის გამოძახებითაც უნდა დავიწყოთ სესიებთან მუშაობა

$_SESSION - მასივი სადაც ჩავწერთ/წავშლით მნიშვნელობებს, რომლებიც შეინახება სესიაში, ჩვენს შემთხვევაში test -ზე ჩაიწერება სტრიქონი hello world

session_id() - დაბეჭდავს სესიის id-ს, ამით შეგვიძლია გავიგოთ რა იქნება მიმდინარე სესიის ფაილი და ჩავიჭყიტოთ, სახელი ასე ფორმირდება sess_სესიის ID

session_save_path() - გვიჩვენებს იმ მისამართს სადაც ინახება სესიის ფაილი

ჩემს შემთხვევაში სესიის ფაილი ასე გამოიყურება

test|s:11:"hello world";

აქ test არის ის სახელი რაც გამოვიყენე ჩემი მნიშვნელობის შესანახად $_SESSION მასივში, s მიუთითებს მონაცემის ტიპზე, 11 არის მონაცმის ზომა, ხოლო ორ ბრჭყალში მოთავსებულია მნიშვნელობა რაც შევინახე, ამ შემთხვევაში hello world. ეს ყველაფერი ბოლოს სრულდება ;-ით რათა გამოიყოს მნიშვნელობები ერთმანეთისგან.

ახლა მეორე ფაილიც შექმენით, შემდეგი კოდით:

session_start();

echo "sess id: ".session_id();
echo "
"; echo "value of test is ".$_SESSION["test"]."";

აქ დააკვირდით, რომ სესიის id იგივეა, ხოლო ტესტში ჩაწერილია და იბეჭდება hello world

დიდი ხანია ამდენი არ მიწერია, კითხვები და მადლობები კომენტარებში

p.s ჰოდა კიდევ რა აზრის ხართ ცოცხალ რეჟიმში სწავლებაზე