Вэб програмчлалд зайлшгүй хэрэглэгддэг ойлголтуудын нэг нь 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-той холбоотой функц, боломжуудын талаар илүү лавлагааг эндээс үзээрэй :)