មេរៀនទី៩: PHP- Cookies និង Session


1. Cookie.
cookie គឺជាទិន្នន័យដែលរក្សាទុកដោយ user‟s browserដែលប្រព្រឹត្ដទៅបានដោយការ requestពី server ឬ script ។ វាអាចរក្សាទុកបានត្រឹមតែ 20 cookies និង ទំហំផ្ទុក ទិន្នន័យ បានត្រឹម 4 kilobyte ប៉ុណ្ណោះ ហើយរាល់ cookie និមួយៗត្រូវតែមាននូវ ឈោះ តំលៃ និង កាលបរិច្ឆេទឈប់ប្រើប្រាស់់ ។
បន្ទាប់ពី cookieត្រូវបាន set មានតែ ម៉ាស៊ីនកំព្យូទ័រដែល set នូវ cookie នោះប៉ុណ្ណោះទើប អាច មាន សិទ្ធ read នូវទិន្នន័យដែលមាននៅខាងក្នុងបាន ប៉ុន្ដែក៏អាស្រ័យទៅលើ user‟s privacy ដែល userអាចធ្វើការ configure នៅលើ browser របស់ពួកគេ ដើម្បីអោយ cookie ទាំងអស់ មាន លទ្ធភាព set ឬ ក៏បដិសេធមិនអោយមានការ request cookie ។ cookie អាចជា វិធីសាស្ដ្រ ដ៏ប្រសើរសំរាប់រក្សារទុកនូវពត៌មានខ្លីពីអ្នកប្រើប្រាស់ ពី page មួយទៅ page មួយទៀត ។ .
Cookies របស់ PHP បញ្ជូនទៅកាន់ web server ដោយប្រើប្រាស់ setcookie() function ។ប្រសិនបើ cookie បាន set នូវ time-out browser នឹងធ្វើការចងចាំនូវ cookie ទោះបីជាអ្នក restartម៉ាស៊ីនក៏ដោយ ប៉ុន្ដែ ប្រសិន បើអ្នកមិនបាន set នូវ time-out សំរាប់ cookie នោះទេ browser នឹងបំបាត់ចោលនូវ cookie នោះភ្លាមនៅពេល ដែលអ្នក close browser។ សំរាប់ជាឧទាហរណ យើងនឹង set cookie នៅពេលដែល user បញ្ចូលនូវ username និង password បានត្រឹមត្រូវជាមួយនឹង login form ។
Auth.php
class Auth
{
function Auth()
{
mysql_connect(‘localhost’, ‘root’);
mysql_select_db(‘my_own_bookshop’);
}
public function authUser($user , $password)
{
$q = ‘ SELECT username , password FROM tblpeople WHERE username=”‘. $user. ‘” AND password =”‘.$password. ‘”‘ ;
$r = mysql_query($q);
if (mysql_num_rows($r) == 1)
{ return TRUE; }
else { return FALSE; }
}
}?>
login.php >
ob_start();
?>

Login

require(“auth.php”);
$auth = new Auth();
if (isset ($_POST['login']) && ($_POST['login'] == ‘Log in’) &&
$auth->authUser($_POST['txtuid'] , $_POST['txtpwd'] ) )
{
$uid = $_POST['txtuid'];
/* User successfully logged in, setting cookie */
setcookie(‘uid’, $uid, time() + 14400, ‘/’);
header(“Location: http://localhost/index.php”);
exit();
}
else {
?>

Log-in




User name :
Password :






}
?>


ចំពោះ superglobal ដែលប្រើដើម្បី read cookies គឺ $_COOKIE ដែលយើងនឹងអនុវត្ដន៍វាជា មួយនឹងឧទាហរណ៍នៅក្នុង file មួយឈោះថា index.php ។
index.php
if (isset ($_COOKIE['uid']) && $_COOKIE['uid'])
{
?>

Index page

Logged in with UID:
Log out.


}
else {
/* If no UID is in the cookie, we redirect to the login .page */
header(‘Location: http://localhost/login.php’);
}
?>
សំរាប់ការប្រើប្រាស user id របស់យើងនេះ គឺវាមានភាពចាំបាច់ណាស់ ដូចជាការចង់ចាំសំរាប់Authentication data (ដូចដែលយើងបានអនុវត្ដន៍នៅក្នុង script របស់យើង ) ។ប៉ុន្ដែវាមិនទាន់ជាគំនិតដែលត្រឹមត្រូវនោះទេ ពីព្រោះ អ្នកប្រើប្រាស់អាចកែប្រែ cookies ទាំងនោះ ឬ install តំលៃផ្សេងៗបានទៅតាមអំពើចិត្ដ ។
មានតំណោះយ៉ាងប្រសើរមួយសំរាប់បញ្ហានេះគឺការប្រើប្រាស់ PHP Sessions ដែលយើីងនឹងអនុវត្ដន៍នៅក្នុងឧទាហរណ៍ក្រោយ
មួយទៀត ។ ដើម្បី លប់ cookie អ្នកគ្រាន់តែប្រើប្រាស់ parameters ដូចដែលអ្នក set cookie ប៉ុន្ដៃអ្នកមិនចាំបាច់ផ្ដល់នូវ value សំរាប់ cookie នោះទេ ហើយ កាលបរិច្ឆេទឈប់ប្រើប្រាស់អ្នកត្រូវផ្ដល់អោយជាកាលបរិច្ឆេទនៃអតីតកាល ។ នៅក្នុង logout page យើងនឹងលប់ cookie ដោយប្រើវិធី ដូចខាងក្រោម។
logout.php
setcookie(‘uid’, ”, time() – 86400, ‘/’);
header(‘Location: http://localhost/login.php’);
?>
time()-86400 គឺជាកាលបរិច្ឆេទដែលកន្លងហួសទៅមួយថ្ងៃ នឹងជាកាលបរិច្ឆេទនៃអតីតកាល
ដើម្បីប្រាប់អោយ browser បំបាត់ចោលនូវ cookie data នោះ ។
2. SESSIONS .
PHP session អនុញ្ញាតិអោយ application របស់អ្នករក្សារទុកពត៌មាននៅក្នុងcurrent session ខណៈពេលដែលអ្នកប្រើប្រាស់បាន logged in ទៅកាន់ application របស់អ្នក ។ session ត្រូវបាន កំណត់ ដោយ session ID តែមួយគត់ PHP បង្កើត session ID ដោយ MD5 hash នៃ remote IP addressនិង បន្ថែមនូវសញ្ញាផ្សេងៗដោយ random ទៅក្នុង hexadecimal string ។ យើងនឹង សរសេរឡើងវិញនូវឧទាហរណ៍លើកមុន ដែលយើងបានប្រើប្រាស់ cookie មកជំនួសដោយ ការប្រើ ប្រាស់ session វិញ ។
login.php


require(“auth.php”);
$auth = new Auth();
session_start();
if (isset ($_POST['login']) && ($_POST['login'] == ‘Log in’) &&
$auth->authUser($_POST['txtuid'] , $_POST['txtpwd'] ) )
{
$uid = $_POST['txtuid'];
$_SESSION['uid'] = $uid;
header(“Location: http://localhost/index.php”);
exit();
}
else
{
?>
/* HTML form comes here */
}
?>


index.php >
if (isset ($_SESSION['uid']) && $_SESSION['uid'])
{
?>

Index page

Logged in with UID:
Log out.


}
else
{
/* If no UID, we redirect to the login page */
header(‘Location: http://localhost/login.php’);
}
?>
logout.php
session_start();
$_SESSION = array();
session_destroy();
header(‘Location: http://localhost/login.php’);
?>
យើងនៅតែ initialize នូវ session ជាមួយនឹង session_start() បន្ទាប់ពីយើងអាច clear នូវsession បានដោយធ្វើអោយ $_SESSION subperglobal ទៅជា empty array បន្ទាប់ មកយើង ធ្វើការDestroy session ហើយនឹង associate data ដោយការ call session_destroy() function ។
ចំនាំ ៖ ដើម្បីលប់ចេញនូវធាតុទាំងអស់របស់ session អ្នកត្រូវតែផ្ដល់ empty array ទៅអោយ variableនោះ ។