SỠdụng session trong PHP
Trong hầu hết các ứng dụng mạng khi láºp trình vá»›i php, việc sá» dụng session là điá»?u gần như bắt buá»™c đối vá»›i các láºp trình viên. Bởi nếu không có session thì chúng ta ko thể truy cáºp được các biến đã có dữ liệu ở trang khác, nếu trong cùng thư mục, Ä‘iá»?u đó không có gì khó bởi chúng ta có thể sá» dụng submit form để lấy dữ liệu. Thế nhưng khi sang thư mục khác, chúng ta chẳng có cách nà o lấy lại dữ liệu cá»§a biến đó Ä‘ang lưu giữ ngoà i session và cookie. Tuy nhiên sá» dụng cookie đôi khi có lúc bất tiện, đó là má»—i lần sá» dụng biến, ta lại phải Ä‘á»?c cookie ra, thêm nữa, nhiá»?u máy client không cho phép viết cookie xuống máy. (Thế nhưng trong việc láºp trình vá»›i shopping, đôi khi cookie là điá»?u đầu tiên chá»?n lá»±a cá»§a tôi, bởi như váºy sẽ tăng tốc độ cá»§a trang khi ngưá»?i dùng truy cáºp trở lại :) Ngoại trừ việc check credit card).
Tôi lấy và dụ khi viết đăng nháºp và o các trang, khi đăng nháºp thà nh công, ngay vị trà đăng nháºp được thay thế bằng má»™t Ä‘oạn text khác, má»™t câu chà o mừng chẳng hạn. Và dụ:
Trang đăng nháºp lúc đầu:
H� tên : Hộp text box ở đây
Máºt khẩu: Há»™p textbox ở đây
Ä?ăng nháºp
Sau khi đăng nháºp xong, lúc nà y sẽ là má»™t Ä‘oạn text thế và o, chẳng hạn:
Xin chà o Tên user, chúc một buổi tối vui vẻ ...
Thoát
Bây giá»? ta sẽ viết trang đăng nháºp nà y và o trong má»™t trang đăng nháºp riêng, sau đó sẽ include và o các trang, tôi gá»?i trang nà y là login.php
Trước tiên tạo giao diện trước đã
<?php
//Kiểm tra xem đã có session chưa, nếu chưa có thì hiển thị đoạn html sau
if(!$ses_test[UserName]){
?>
<form name = "frmLogin" action = "<?=$PHP_SELF?>" method = "post">
<table>
<tr>
<td>Tên đăng nháºp: </td>
<td><input type = "textbox" value = "" name = "txtUserName"></td>
</tr>
<tr>
<td>Máºt khẩu: </td>
<td>><input type = "textbox" value = "" name = "txtPassword"></td>
</tr>
<tr>
<td colspan = "2">&nbsp</td>
</tr>
<tr>
<td colspan = "2"><a href = "javascript:document.frmLogin.sumit();"><strong>Ä?ăng nháºp</strong></a></td>
</tr>
</table>
</form>
Và ngay ở dưới đó, ta tạo một bảng khác để có thể viết ra một dòng chà o h�i
<?php
//Nếu có rồi thì hiển thị đoạn sau
}else{
?>
<table>
<tr>
<td>Xin chà o <?=$ses_testp[UserName]?>, chúc bạn ... </td>
</tr>
<tr>
<form name = "frmLogout" method = "post" style = "display:inline" action = "<?=$PHP_SELF?>">
<input type = "hidden" name = "log_out" value = "out">
</form>
<td><a href = "javascript:document.frmLogout.sumit();">Thoát</a></td>
</tr>
</table>
<?
}
?>
Ở ngay đầu trang của file login.php, ta viết đoạn mã để kiểm tra
<?php
if($HTTP_POST_VARS[txtUserName]){
//L�c trong cơ sở dữ liệu, giả sỠđã có kết nối đến cơ sở dữ liệu
$sql = "select UserName, Password from test_Member where UserName = '$txtUserName' and Password = '$txtPassword'";
$rs = mysql_querry($sql) or die("Không thực hiện được truy vấn");
$row = mysql_fetch_array($sql);
$num_rows = mysql_num_rows($rs);
//Kiểm tra xem có tồn tại user với pass có tồn tại hoặc trùng khớp ko ?
if($num_rows==0){
echo "<script language = 'javascript'>
alert('Tên đăng nháºp và máºt khẩu không đúng. Kiểm tra lại');
window.history.back(-1);
</script>
exit();
}else{//Nếu đúng
//Nếu có session trước đó thì huỷ b� đi
//Ở đây tôi chỉ dùng môt biến session
session_start();
if($ses_test){
unset($ses_test[user_name]);
}
session_register("ses_test");
$ses_test[user_name]=$row[UserName];
}
}
?>
Ngay ở đầu trang, ta kiểm tra nếu có biến $txtUserName gá»i lên từ form thì má»›i thá»±c hiện Ä‘oạn php trên, sau đó, trong phần dưới ta kiểm tra
if(!$ses_test[UserName])
Nếu chưa có thì hiển thị form nháºp, còn nếu có rồi thì hiển thị Ä‘oạn chà o há»?i.
Còn gi� đến đoạn log out
Viết sau ngay đoạn kiểm tra login
<?php
//Log out
if($HTTP_POST_VARS[log_out]=="out"){
session_start();
unset($ses_test[user_name])
session_unregister("ses_test");
session_destroy();
}
Ở đây tôi sỠdụng <?=$PHP_SELF?> để có thể login và logout ngay trong trang luôn.
Hy v�ng và dụ nà y sẽ giúp cho các bạn mới là m quen với PHP sẽ ko cảm thấy session là một cái gì đó rất khó sỠdụng :)