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

 មេរៀនទី៩: 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

<?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();

?>

<html>

<head><title>Login</title></head>

<body>

<?php

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 {

?>

<h1>Log-in</h1>

<form method=”post” action=”login.php”>

<table>

<tr><td>User name :</td>

<td><input type=’text’ size=’18’ name=’txtuid’/></td></tr>

<tr><td>Password :</td>

<td><input type=’password’ name=’txtpwd’/></td></tr>

<tr><td colspan=’2′ align=’right’>

<input type=’submit’ name=’login’ value=’Log in’/></td>

</tr>

</table>

</form>

<?php

}

?>

</body>

</html>

ចំពោះ superglobal ដែលប្រើដើម្បី read cookies គឺ $_COOKIE ដែលយើងនឹងអនុវត្ដន៍វាជា មួយនឹងឧទាហរណ៍នៅក្នុង file មួយឈោះថា index.php ។

index.php

<?php

if (isset ($_COOKIE[‘uid’]) && $_COOKIE[‘uid’])

{

?>

<html>

<head><title>Index page</title></head>

<body>

Logged in with UID: <?php echo $_COOKIE[‘uid’]; ?><br />

<a href=’logout.php’>Log out</a>.

</body>

</html>

<?php

}

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

<?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

<html>

<body>

<?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 */

<?php

}

?>

</body>

</html>

index.php >

<?php

if (isset ($_SESSION[‘uid’]) && $_SESSION[‘uid’])

{

?>

<html>

<head><title>Index page</title></head>

<body>

Logged in with UID: <?php echo $_SESSION[‘uid’]; ?><br />

<a href=’logout.php’>Log out</a>.

</body>

</html>

<?php

}

else

{

/* If no UID, we redirect to the login page */

header(‘Location: http://localhost/login.php’);

}

?>

logout.php

<?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នោះ ។