Вэб програмчлалд зайлшгүй хэрэглэгддэг ойлголтуудын нэг нь Session юм. "Session" нь англи хэл дээр "хурал, чуулган" гэсэн утга илэрхийлдэг. Харин Вэб програмчлалын хувьд session гэдэг нь хэрэглэгч вэб үзэх(нэвтрэх гэх мэт) сервер дээр тухайн хэрэглэгчтэй холбоотой мэдээлэл(хувьсагч) сервер дээр үүсэх үйл явц хэмээн энгийнээр тайлбарлаж болох юм. Жишээ нь ямар нэг гишүүнчлэл бүхий сайтуудад уншигч, хэрэглэгчид өөрийн хэрэглэгчийн эрхээр нэвтрээд ижил хуудсуудаар "аялахад" тухайн хэрэглэгчид л хамаарах мэдээллүүдийг харуулдаг шүү дээ. Үүнийг session-ы тусламжтай програмчилдаг.
Дээрхи зургаас session-ыг боловсруулах үйл явцыг хялбархан ойлгож болно.
Одоо хэдэн энгийн жишээг PHP дээр нэвтрүүлье.
<?php session_start(); ?>
Session ашиглахын тулд тухайн хуудасныхаа эхэнд session_start(); функцийг зайлшгүй дуудах ёстой.
<?php session_start(); $_SESSION['hello'] = 'Hello World'; echo $_SESSION['hello']; ?>
Session-д хадгалагдаж буй өгөгдөл(хувьсагч)-үүд $_SESSION[] массив хувьсагчид хандах байдлаар ажилладаг. Дээрхи жишээнд $_SESSION['hello'] хувьсагчид 'Hello World' утгыг оноож хэвлэж байна.
Дээрхи жишээг амжилттай туршсан бол Session-ы үйл ажиллагааг илүү сайн ойлгохын тулд дараах кодыг өөр эх файлд хадгалаад ажиллуулаад үз.
<?php session_start(); echo $_SESSION['hello']; ?>
Энэ кодын хувьд $_SESSION['hello'] хувьсагчид утга оноогоогүй хэдий ч түрүүчийн файлыг ажиллуулахад үүссэн session-д утга оноогдон сервер дээр учир энэ файлд ч гэсэн $_SESSION['hello'] хувьсагч хүчин төгөлдөр үйлчилнэ гэсэн үг юм. Хичнээн Refresh хийж хуудсыг дахин дахин ачааллаж үзсэн ч зүгээр байгаа биз :)
Одоо session-ы талаар арай дэлгэрүүлэн ойлгоход дөхөм болгох үүднээс саяын эх кодыхоо төгсгөлд бүх session хувьсагчийг устгах session_destroy(); функцийг нэмж дуудаад үз.
<?php session_start(); echo $_SESSION['hello']; session_destroy(); ?>
Саяын хуудсаа 2 дахин ачааллаад үзвэл 'Hello World' тэмдэгт мөр хэвлэгдэхгүй болж байгааг анзаарсан уу? session_destroy() функц эхний удаа хуудас дуудалтанд биелсэн учир дараа дараачин дуудалтанд $_SESSION['hello'] хувьсагч устсан байгааг үүнээс анзаарч болно.
session устгахад session_destroy() функцээр бүх session-г устгахаас гадна тухайн нэг функцийн хувьд unset() функцийг ашиглах боломжтой.
<?php session_start(); if(isset($_SESSION['hello'])) unset($_SESSION['hello']); ?>
Session ашиглан уншигч та бүхэн өөрсдөө сэтгэмжлэн олон янзын жишээ туршиж үзэхийг зөвлөж байна. Миний зүгээс "амьд" жишээ болгох үүднээс нэвтрэх (login) маш энгийн жишээг бичиж үзүүлье.
login.php
<?php global $error; session_start(); if(isset($_SESSION['user'])){ header("Location: welcome.php"); } ?> <html> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/> <title>Нэвтрэх хэсэг</title> </head> <body> <form action="check.php" method="post" name="logform"> <table> <tr> <td> Хэрэглэгчийн нэр: </td> <td> <input type='text' name="user" /> </td> </tr> <tr> <td> Нууц үг: </td> <td> <input type='password' name="pass" /> </td> </tr> <tr> <td /> <td style='text-align:right;'> <input type='submit' value="Нэвтрэх"/> </td> </tr> </table> <?php echo $error; ?> </form> </body> </html>
check.php
<?php session_start(); $username = "ganaa"; $password = "pass"; $user = $_POST['user']; $pass = $_POST['pass']; if($user == $username && $pass == $password){ $_SESSION['user'] = $user; header("Location: welcome.php"); } else { $error = "Хэрэглэгчийн нэр, эсвэл нууц үг буруу байна."; include("login.php"); } ?>
welcome.php
<?php session_start(); if(!isset($_SESSION['user'])){ header("Location: login.php"); } ?> <html> <head> <title>Welcome <?php echo $_SESSION['user']; ?> </title> </head> <body> <p> <a href="logout.php">Log out</a> </p> </body> </html>
logout.php
<?php session_start(); if(isset($_SESSION['user'])){ unset($_SESSION['user']); } session_destroy(); header("Location: login.php"); ?>
Session-той холбоотой функц, боломжуудын талаар илүү лавлагааг эндээс үзээрэй :)
session_destroy();
ReplyDeleteхийхэд бусад зарлагдсан session-уудыг устгаад байна уу үгүй юу.
Би тэгж бодоод байдгийн.
тийм. session_destroy функцийг дуудахад бусад session оо устгачихадаг тал бий.
ReplyDeleteҮүнээс сэргийлэх энгийн арга нь тулд unset() функцийг ашиглах юм уу даа. (ижил индекстэй session давхардах аюулаас аврахгүй)
Ер нь олон прожект дээр ажиллаж байгаа үед virtual host үүсгэж ашиглах нь хамгий найдвартай санагдсан :)
Энэ нь шиг логин хийвэл амархан хакдуулаад тэгээд веб сайт чинь будаа болно. Арай advanced юм нийтэлж хийрхэл дээ
ReplyDelete@Anonymous:
ReplyDeleteСанаа оноогоо нэмэрлэхдээ нэрээ биччихэж байвал сайн байна.
Хийрхэж бичсэнгүй. Тэгээд ч өөрийхөө блогтоо юу бичихээ би өөрөө шийднэ шүү, нэрээ ч биччихээс айгаад байгаа чам шиг нөхдүүдээр бол бүр ч заалгахгүй.
Хэрэв өөрөө учиргүй advanced түвшний зүйл судалмаар байгаа бол нэтээс ухаад олохыг зөвлөе. Анхлан сурч байгаа хүүхдүүдэд зүг чиг, ойлголт өгөх үүднээс энэ бичлэгүүдийг оруулсан болно.
Үнэхээр чадал чинь байвал энэ жишээн дээр бичсэн login-г хакдах аргыг коментээр үлдээгээрэй.
Tnx andaa nice Jishee bna. ASP.NET deer sessiontei login hiih talaar neg jishee oruulj uguuch plz!!!
ReplyDeleteЭнэ Ганаагийн сүүлийн сэтгэгдэл дээр байгаа шиг АНХЛАН СУРЧ БАЙГАА ХҮҮХЭД байна аа би :P Естой гоё тайлбарлаж, үүнээс илүү яаж тайлбарлахав. Чи хол явна аа. Баярлалаа :D
ReplyDelete@sumiya
ReplyDeleteThank a lot. I got confused this way. now i found mistake. I am just studying about php. again thaks..
Сайн байна уу? Session-ий хичээл ойлгомжтой, товчхон байна. Баярлалаа. PHP кодыг яаж нууцладаг юм бэ? энкрипт л хийдэг юм шиг байна лээ. Гэхдээ сайн ойлгохгүй юм. Энэ тал дээр туслаач. Хүч хөдөлмөрөө гаргаж хийсэн вэб-ээ хакдуулахаас үнэхээр айж байна. хэхэх
ReplyDeleteмааш их баярлалаа хэрэгтэй зүйл байна
ReplyDeletemash ih taalagdlaa bayarlalaa
ReplyDelete