Các bản tin khác
Lập Trình PHP Căn Bản
Bài 7: Khái niệm cơ bản về Cookie và session trong PHP
Cookie và session là hai phương pháp sử dụng để quản lý các phiên làm việc giữa người sử dụng và hệ thống. Việc quản lý phiên làm việc này sẽ giúp bạn tạo ra sự chứng thực hiệu quả bởi việc xác nhận thông tin trước khi truy cập vào một phân vùng cố định. Ngoài ra, việc quản lý tốt phiên làm việc cũng giúp người truy cập cảm thấy dễ dàng sử dụng dịch vụ của trang web cho những lần truy cập sau. Bởi cớ chế quản lý phiên làm việc ghi nhận lại quá trình truy cập của người sử dụng khi họ thăm viếc trang web của bạn lần đầu.
1- Tổng quan về cookie:
Cookie là 1 đoạn dữ liệu được ghi vào đĩa cứng hoặc bộ nhớ của máy người sử dụng. Nó được trình duyệt gởi ngược lên lại server mỗi khi browser tải 1 trang web từ server.
Những thông tin được lưu trữ trong cookie hoàn toàn phụ thuộc vào website trên server. Mỗi website có thể lưu trữ những thông tin khác nhau trong cookie, ví dụ thời điểm lần cuối ta ghé thăm website, đánh dấu ta đã login hay chưa, v.v...
Cookie được tạo ra bởi website và gởi tới browser, do vậy 2 website khác nhau (cho dù cùng host trên 1 server) sẽ có 2 cookie khác nhau gởi tới browser. Ngoài ra, mỗi browser quản lý và lưu trữ cookie theo cách riêng của mình, cho nên 2 browser cùng truy cập vào 1 website sẽ nhận được 2 cookie khác nhau.
a -Thiết lập cookie:
Để thiết lập cookie ta sử dụng cú pháp:
Setcookie("tên cookie","giá trị", thời gian sống)
Tên cookie là tên mà chúng ta đặt cho phiên làm việc.
Giá trị là thông số của tên cookie.
Ví dụ:
Setcookie("username","admin", time() +3600)
Như ví dụ trên ta thấy với tên là username và giá trị là admin, có thời gian sống là 1 giờ tính từ thời điểm thiết lập.
Chú ý: Kịch bản cookie phải đặt trên mọi giá trị trả về bao gồm thẻ HTML và lệnh echo.
Kịch bản cookie phải đặt trên mọi giá trị trả về bao gồm thẻ HTML và lệnh echo.b - Sử dụng cookie:
Để sử dụng lại cookie vừa thiết lập, chúng ta sử dụng cú pháp:
Cú pháp: $_COOKIE["tên cookies"]
Tên cookie là tên mà chúng ta thiết lập phía trên.
Ví dụ:
Tạo trang cookie.php với nội dung sau:
<?php
setcookie("name","Kenny Huy",time() + 3600);
?>
<html>
<head>
<title>Test page 1</title></head>
<body>
<b><a href=cookie2.php>Click here</a></b>
</body>
</html>
Tiếp tục tạo trang cookie2.php với nội dung sau:
<html>
<head><title>Result Page</title></head>
<body>
<?php
echo "Ten cua ban la <b>".$_COOKIE['name']."</b>";
?>
</body>
</html>
c- Hủy Cookie:
Để hủy 1 cookie đã được tạo ta có thể dùng 1 trong 2 cách sau:
+ Cú pháp: setcookie("Tên cookie")
Gọi hàm setcookie với chỉ duy nhất tên cookie mà thôi
+ Dùng thời gian hết hạn cookie là thời điểm trong quá khứ.
Ví dụ: setcookie("name","Kenny Huy",time()-3600);
Ví dụ:
Tiếp tục tạo trang cookie3.php với nội dung sau:
<?php
setcookie("name","Kenny Huy",time()-360);
?>
<html>
<head>
<title>Test page 1</title></head>
<body>
<b><a href=cookie2.php>Click here</a></b>
</body>
</html>
2- Tổng quan về session:
Một cách khác quản lý người sử dụng là session. Session được hiểu là khoảng thời gian người sử dụng giao tiếp với 1 ứng dụng. Một session được bắt đầu khi người sử dụng truy cập vào ứng dụng lần đầu tiên, và kết thúc khi người sử dụng thoát khỏi ứng dụng. Mỗi session sẽ có được cấp một định danh (ID) khác nhau và nội dung được lưu trong thư mục thiết lập trong file php.ini (tham số session.save_path).
a- Thiết lập session:
Để thiết lập 1 session ta sử dụng cú pháp: session_start()
Đoạn code này phải được nằm trên các kịch bản HTML. Hoặc những lệnh echo, printf.
Để thiết lập 1 giá trị session, ngoài việc cho phép bắt đầu thực thi session. Chúng ta còn phải đăng ký 1 giá trị session. Để tiện cho việc gán giá trị cho session đó.
Ta có cú pháp sau: session_register("Name")
Ví dụ:
<?php
Session_start();
Session_register("username");
?>
b- Sử dụng giá trị của session:
Giống với cookie. Để sử dụng giá trị của session ta sử dụng mã lệnh sau:
Cú pháp: $_SESSION["name"]
$_SESSION["name"]Với Name là tên mà chúng ta sử dụng hàm session_register("name") để khai báo.
Ví dụ:
Tạo trang session.php với nội dung sau:
<?php
session_start();
session_register("name");
$_SESSION["name"] = "Kenny Huy";
?>
<html>
<head>
<title>Test page 1</title></head>
<body>
<b><a href=session2.php>Click here</a></b>
</body>
</html>
Tạo trang session2.php với nội dung sau:
<?
session_start();
?>
<html>
<head><title>Result Page</title></head>
<body>
<?php
echo "Ten cua ban la <b>".$_SESSION["name"]."</b>";
?>
</body>
</html>
c- Hủy bỏ session:
Để hủy bỏ giá trị của session ta có những cách sau:
session_destroy() // Cho phép hủy bỏ toàn bộ giá trị của session
session_unset()// Cho phép hủy bỏ session .
Ví dụ:
Tạo trang session3.php với nội dung sau:
<?php
session_start();
session_destroy();
?>
<html>
<head>
<title>Test page 1</title></head>
<body>
<b><a href=session2.php>Click here</a></b>
</body>
</html>
3- Tổng Kết:
Sau bài học này chúng ta đã nắm được cách điều khiển phiên làm việc giữa cookie và session. Sử dụng chúng trong từng trường hợp cụ thể. Từ đó có thể áp dụng để viết những ứng dụng nhỏ như kiểm soát người đăng nhập, làm giỏ hàng online,…..
Bài tập áp dụng:
Xây dựng website sử dụng tính năng session thỏa mãn những yêu cầu sau:
1- Tạo trang đăng nhập với username/password là : admin/vietchuyen. Nếu user đăng nhập thành công thì sẽ xuất ra dòng welcome, admin.
2- Tạo trang đăng xuất thoát khỏi phần quản trị
(Bùi Quốc Huy)
66264
PHP Framework những điều nên và không nên
Khái quát về PHP Framework
Học PHP như thế nào khi bạn chưa biết lập trình?
Tự học lập trình PHP dễ hay khó ?
Web 2.0 - Khái niệm và bản chất của chúng như thế nào ?



doan khanh (11:50 21/04/2010)
co ban la rat chi la de nhung cung that chi la khoReply
lê phương (13:03 14/05/2010)
mình xem xong ko hiểu lắm,bạn có thể viết code cho 2 bài tập trên để mọi người tham khảo.Reply
Pham Thai (14:07 28/05/2010)
Tạo trang login.php với nội dung sau<?php
session_start();
session_register("name");
$_SESSION["name"] = "Pham Thai";
?>
<html>
<body>
<form action="CheckLogin.php" method="post">
Username : <input type="text" name="username" size="15"><br>
Password : <input type="text" name="password" size="15"><br>
<input type="submit" value="Login">
</form>
</body>
</html>
và trang CheckLogin.php với nội dung sau :
<?
session_start();
?>
<?php
$username = $_POST['username'];
$password = $_POST['password'];
if($username == "admin"
Reply
le cong bach (04:12 29/05/2010)
bai viet nay rat hay nhung em muon cac anh cac chi viet cu the ve mot ung dung co duoc khongReply
newbie (14:33 11/06/2010)
Ạc . Admin ơi làm ơn sau mỗi bài cho đáp án của bài tập !Reply
vodainam (18:50 13/06/2010)
session_start();create_image();
exit();
function create_image()
{
$md5_hash = md5(rand(0,999));
$security_code = substr($md5_hash, 15, 5);
$_SESSION["security_code"] = $security_code;
$width = 100;
$height = 30;
$image = ImageCreate($width, $height);
$white = ImageColorAllocate($image, 255, 255, 255);
$black = ImageColorAllocate($image, 0, 0, 0);
ImageFill($image, 0, 0, $black);
ImageString($image, 5, 30, 6, $security_code, $white);
header("Content-Type: image/jpeg");
ImageJpeg($image);
ImageDestroy($image);
}
?>
Anh Huy cho em hỏi cái dòng creat_image(); (dưới sesion_statr();) mục đích để làm gì zậy anh? Thank anh!
Reply
myfriend (02:28 13/07/2010)
mình thấy bài làm của bạn Phạm Thai đó là dùng post đấy chứ nhỉ?thế dùng session ở đây làm gì vậy bạn.Mình cũng chưa hiểu nên nhờ mọi người giúp đỡ!Reply
pro (10:30 31/07/2010)
admin ơi!làm giúp mình các bt cuối mỗi phần đi
chứ nói sơ sơ thế này khó hiểu quá
Reply
Đinh Hoàng Kha (11:44 01/08/2010)
Bài 1 thì quá dễ rồi, em xin đưa ra kết quả bài 2 của em hoàn toàn bằng session.Tạo 3 file.
File dangnhap.html có nội dung sau:
<html>
<form action="dangnhap2.php" method=POST>
Tên đăng nhập:<input type=text name="id" size=20>
</br>Mật khẩu:<input type=password name="pass" size=20>
<input type=Submit name=submit value="Đăng nhập">
</html>
File dangnhap2.php có nội dung sau:
<?
if ($_POST['id']=="admin"
Reply
hiepvn (11:49 05/08/2010)
Bai 1:Tạo trang đăng nhập login.php
<?php
session_start();
session_register("name");
session_register("pass");
?>
<html>
<head>
<body>
<form action="checkLogin.php" method="post">
Username: <input type="text" name="name" size="15" /></br>
Password: <input type="text" size="15" name="pass" /></br>
</form>
</body>
</head>
</html>
Tiếp sau đó, ta tạo trang checkLogin.php kiểm tra user và pass:
<?php
session_start();
if($_SESSION['name'])=="admin"
Reply
hiepvn (11:59 05/08/2010)
Bai 2 cũng tương tự.để tạo trang đăng xuất, mình tạo file logout.php như sau:
ở file checkLogin.php ta thêm button logout ở trong form
<a href="logout.php"><input type="text" name="logout" /></a>
và thêm session_register("logout"); vào đầu file giống như session_register("name");...
Ở file logout.php ta có:
<?php
session_start();
if ($_SESSION["logout"]) {
session_unset();
echo "<a href="login.php" >Click here to back login.php</a>";
}
?>
Mình còn gà nếu có gì sai sót mong admin và các bạn bỏ qua cho :D thanks!
Reply
Quach Phu Thanh (16:51 09/08/2010)
ban nao lam duoc bai tap ap dung cuoi moi phan thi post len cho a/e tham khao nha.ThankReply
Learning PHP (23:20 28/08/2010)
Có thể không cần khai báo hàm session_register("Name");Mà sử dụng gán trực tiếp là $_SESSION['Name'] = $value;
được không ?
Liệu làm theo cách trên có ảnh hưởng gì không ?
Reply
trungthan (12:06 01/09/2010)
hjc hjc anh thai noi ro hon di trang checklogin yReply
longnhat (22:55 20/11/2010)
thanks .kiến thức thật bổ íchReply
linh (15:35 19/12/2010)
session_register("name"); mình báo lỗi là sao vậy nhỉ?Reply
Minh Tân (08:27 27/12/2010)
mọi người ơi cho mình hỏi: ở đây mình gán giá trị trực tiếp cho session vậy có cách nào mình lấy giá trị động là tên của người đăng nhập gán vào session ko?Reply
Trần Văn Chiến (08:56 27/01/2011)
GIúp em với. EM gặp lỗi sau. em tạo 2 file: file view.php để nhập dữ liệu do ng dùng gửi, file check.php để echo dữ liệu ra, em làm ví dụ này để hiểu về session thui, nhưng toàn gặp lỗi" headers already sent ". Nhân tiện các anh giúp em giải quyết dứt điểm cách fix lỗi "headers already sent " này với ạ, em rất hay gặp lỗi này và đã tìm trên mạng nhưng làm theo vẫn ko đc. code 2 file của em như sau :
1. file view.php :
<html>
<head>
<title>Session Example </title>
</head>
<body>
<form name="login" action="check_login.php" method="post">
<table>
<tr>
<td>Username : </td>
<td><input type="text" name="username" size="30"> </td>
</tr>
<tr>
<td>Password :</td>
<td><Input type="password" name="password" size="30"></td>
</tr>
</table>
<input type="submit" name="submit" value="Login">
<input type="reset" name="reset" value="Reset">
</form>
</body>
</html>
2. file check.php :
<?php
session_start();
session_register("username");
session_register("password");
$_SESSION["username"] = $_POST['username'];
$_SESSION["password"] = $_POST['password'];
echo "username : ".$_SESSION['username']."<br/>";
echo "Password : ".$_SESSION['password'];
?>
Em đã làm theo cách trên phpvn.org để fix lỗi 'headers already sent" là thêm 2 hàm ob_start(); và ob_end_flush(); nhưng đều ko đc. Thanks a
Reply
Phạm Văn Quyết (23:21 21/04/2011)
trang web giúp ích cho mình rất nhiều, cảm ơn tất cảc mọi người làm lên trang web này nhá!Reply
shirokenshin (16:35 08/05/2011)
hic,làm dc mỗi câu 1,có ai làm dc câu 2 koReply
khong ten (10:25 12/05/2011)
khong dc ro rang cho lam minh ko hieu no dung de la gi nuaReply
Pham Van Hiep (16:23 12/05/2011)
chang can khai bao ham session van cho ra ket wua ma.Reply
alone90 (10:40 25/06/2011)
loguot.php amin xem ho em cai nhe hii: em con ga!<?php
session_start();
$_SESSION["name"]=$_POST["name"];
session_destroy();
?>
<html>
<head>
<title>Test page 1</title></head>
<body>
<a href="trangchu.php">click here</a>
</body>
</html>
Reply
le truong (13:19 29/06/2011)
anh em ơi cho mình hỏi cai lỗi này sửa thế nào :Deprecated: Function session_register() is deprecated in C:xampphtdocsxamppai7dangnhaplogin.php on line 4
Deprecated: Function session_register() is deprecated in C:xampphtdocsxamppai7dangnhaplogin.php on line 6
code :
<?php
session_start();
$_SESSION["name"] = "Levantruong";
session_register("name");
$_SESSION["logout"] = "lasdst";
session_register("logout");
?>
<html>
<body>
<form action="CheckLogin.php" method="post">
<table align="center" border="1">
<tr>
<td>Username :
</td>
<td><input type="text" name="username" size="15">
</td>
</tr>
<tr>
<td>Password :
</td>
<td><input type=password name="password" size="15">
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="reset" name="reset" value="Reset">
<input type="submit" value="Login">
</td>
</tr>
</table>
</form>
</body>
</html>
Reply
vuvi (23:02 09/12/2011)
Bạn bỏ 2 dòng 4 và 6 là hết ah. vẫn chạy btNó ko hiểu session_register();
misa (22:19 17/07/2011)
Bạn le truong oi, bạn thử sửa code như thế nầy thì nó có báo lỗi ko nhé.<?php
session_start();
session_register("name");
$_SESSION["name"] = "Levantruong";
session_register("logout");
$_SESSION["logout"] = "lasdst";
?>
Reply
huycuong (16:59 24/07/2011)
sao các comment nào dài minh ko nhìn thấy hết là sao?Reply
Hoang Hung (09:21 27/07/2011)
Các bạn giúp mình sửa lỗi này với: "Cannot modify header information - headers already sent by (output started at C:AppServwwwSessionAndCokkieindex.php:2) in C:AppServwwwSessionAndCokkieindex.php on line 3"KHiminhf tạo một Cookies dạng:setcookie("q", "anhhung",time() 3600);
thì khi chạy lên bị lỗi như trên.
Mình viết bằng công cụ NetBean.
Mong các chỉ giúp
Reply
Phạm Duy Thanh (15:37 12/08/2011)
Theo mình thì các bạn có thể hiểu nôm na thế này:- Cookie và session về cơ bản là giống nhau NHƯNG cookie được lưu trên client (PC của người dùng) còn session được lưu trên Server (máy chủ chạy web).
- Thứ 2 vì sao người ta sử dụng session mà không sử dụng POST. Hai cách này đều có thể lưu giá trị của một biến từ trang này sang trang khác ví dụ tên user đã đăng nhập. Nhưng POST thì phải dùng input hidden để lưu -> trang nào cũng phải create hidden, còn session nó đã được lưu vào một biến cụ thể nào đó và chỉ cần khởi tạo lần đầu tiên, thì nó sẽ luôn luôn tồn tại ở tất cả các trang trong web bạn echo hoặc print bất kỳ ở vị trí nào trong bất cứ trang nào đều lấy được giá trị đó, nó chỉ được hủy khi gặp lệnh hủy session -> rất tiện dụng -> hay thường dùng để lưu giữ trạng thái đăng nhập, trạng thái mua hàng...
- Cookie cũng giữ được trạng thái như session nhưng khác ở chỗ bạn tắt trang web đó đi thì session sẽ bị hủy-> đăng nhập lại nhưng cookie thì ko (cookie tồn tại trên máy người sử dụng)-> bạn có thể dùng cookie đó để đăng nhập tự động lại nếu web bạn vào cho phép chức năng dùng cookie để đăng nhập mà bạn ko phải đánh user và pass để đăng nhập
Reply
khang (13:47 30/08/2011)
thanksReply
Nguyễn Sinh Kiêm (17:14 23/09/2011)
Mình đang quản trị một website mà mình ko đăng nhập vào admin để đưa tin được. cứ mỗi lần đang nhập vào thì bị out ra có ai biết chỉ với. nếu biết rõ hơn chỉ dùm cách kiểm tra biến Regiter_Global nó đang on hay off ?Mình xin cảm ơn
Reply
ngoc nhu (21:27 27/09/2011)
cho mình hỏi là trong asp.net mình khởi tạo session trong file global.asax, còn trong php, giả sử có nhìu trang thì mình nên khởi tạo session này ở đâu.Vì nếu khởi tạo session ở 1 trang, ví dụ là trang1.php chắng hạn, thì chả lẽ khi mình load lại trang1.php đó thì nó cũng khởi tạo lại giá trị cho biến session đó rồi, như vậy là mất giá trị đã lưu trước đó trong session sao???? Thanks
Reply
Hường (16:33 06/10/2011)
Mình bị lỗi này, ai biết chỉ giúp mình với!!!Deprecated: Function session_register() is deprecated in C:xampphtdocsmyWebaitapcheck.php on line 3
Deprecated: Function session_register() is deprecated in C:xampphtdocsmyWebaitapcheck.php on line 4
code:
session_start();
session_register("username");
session_register("pass");
$_SESSION['username']=name;
$_SESSION['pass']=1234;
Reply
nguyễn đăng mạnh (22:42 09/10/2011)
file 1 session.php<?php
setcookie("name","Manhthan",time() 3600);
session_start();
$_SESSION['username']="manhthan91";
$_SESSION['password']="cTmlnnbcnn2";
$u="";
$p="";
if (isset($_POST['submit'])){
if($_POST['username']==null){
echo "Bạn vui lòng nhập tên đăng nhập !<br/>";
}else{
$u=$_POST['username'];
}if($_POST['password']==null){
echo "Bạn vui lòng nhập mật khẩu<br/>";
}else{
$p=$_POST['password'];
}if ($u==$_SESSION['username']
Reply
ha manh tien (23:41 15/10/2011)
minh co y dinh la hoc o tren mang nhung hoc phi ho dua ra dat qua , neu nhu la 500k thi ok minh se hoc.sinh vien bon minh thi lam gi ma co tien nhieu .kinh moi ban admin giam gia de anh em dc hoc a.thanksReply
Nguyen Thi Thu Hao (09:47 25/11/2011)
em muon tham gia vao dien dan de hoc hoi them.Reply
Ray Nguyen (13:26 26/11/2011)
Đã test xong, fix lại bài của bạn "Tran Van Chien" mong các bạn tham khảm và đóng góp ý kiến//code trong file "trangdangnhap.php"
<html>
<head>
<center><font size = 30 color = red>Please Login</font></center>
</head>
<body>
<form name="login" action="trangxuly.php" method="post">
<table>
<tr>
<td>Username : </td>
<td><input type="text" name="username" size="30"> </td>
</tr>
<tr>
<td>Password :</td>
<td><Input type="password" name="password" size="30"></td>
</tr>
</table>
<input type="submit" name="submit" value="Login">
<input type="reset" name="reset" value="Reset">
</form>
</body>
</html>
//code trong file "trangxuly.php"
<?php
session_start();
session_register("username");
session_register("password");
$_SESSION["username"] = $_POST['username'];
$_SESSION["password"] = $_POST['password'];
if (($_SESSION["username"] == "Ray") && ($_SESSION["password"] == "123456"))
{
echo "<b><font size = 20 color = 'blue'>Welcome Ray nguyen</font></b>"."<br>";
echo "<a href = trangdangnhap.php> Back </a>"."<br>";
echo "username cua ban la : ".$_SESSION['username']."<br/>";
echo "Password cua ban la : ".$_SESSION['password'];
}
else
{
echo "<font color = 'red'> Username or Password is wrong</font>"."<br>";
echo "username: ".$_SESSION['username']." la sai"."<br/>";
echo "Password: ".$_SESSION['password']."la sai";
}
?>
//Tks bạn Chiến đã post bài làm lên để mọi người tham khảo. Thân ^^
Reply
Hồ Quang Thạnh (14:26 12/12/2011)
<?phpsession_start();
session_register("username");
session_register("password");
$_SESSION["username"]=$_POST["username"];
$_SESSION["password"]=$_POST["password"];
?>
<html>
<head>
<title> Login <title>
</head>
<body>
<?php
if(!$_POST['login'])
{
?>
<b>Ban dang dang nhap vao trang quan tri</b>
<form action="<?=$_SERVER[PHP_SELF]?>" method="post">
<br> Username <input type="text" name="username">
<br> Password <input type="password" name="password">
<br> <input type="submit" name="login" Value="Login">
</form>
<?php
}
else{
$user=$_SESSION["username"];
$pass=$_SESSION["password"];
if($user=="admin" && $pass=="vietchuyen"){
$check=true;
echo "<font color=blue size=12>"."Welcome $user"."<font>";
}
else{
echo "Dang nhap khong thanh cong. Vui long kiem tra lai username va password !!!";
}
}
?>
<?php
if($check && !$_POST["logout"])
{
?>
<form action="<?=$_SERVER[PHP_SELF]?>" method="post">
<input type="submit" name="logout" value="logout">
</form>
<?php
}
else{
session_start();
session_destroy();
}
?>
</body>
</html>
Reply
Karmahuynh (19:53 31/12/2011)
Hi KennyCam on bai viet cua anh.
session_destroy() // Cho phép hủy bỏ toàn bộ giá trị của session
session_unset()// Cho phép hủy bỏ session .
Huỷ toàn bộ giá trị của session khác với huỷ bỏ session như thế nào vậy anh.
Lúc nào minh nên sử dụng destroy, hay unset?
Và, lúc nào mình sử dung session, lúc nào nên xài cookie trong thuc te?
Reply