Author Topic: Sử dụng Session trong PHP  (Read 99644 times)

KenyLieou

  • Global Moderator
  • PHP Intermediate
  • *****
  • Posts: 908
  • Nothing's Impossible
    • MSN Messenger - kiensuy2000@hotmail.com
    • View Profile
    • Email
Sử dụng Session trong PHP
« on: April 21, 2008, 03:35:22 PM »
Trang web HTML thông thường sẽ ko thể truyền dữ liệu từ trang này sang trang khác. Nói 1 cách khác là : tất cả thông tin trở thành quên lãng khi một trang web mới được tải . Điều này gây khó khăn cho một số công việc như là mua hàng ( shopping carts) - những thứ cần thiết dữ liệu ( sản phẩm người dùng đã chọn) ghi nhớ từ trang này sang trang khác

Khái niệm về Sessions trong PHP

PHP session giải quyết vấn đề này bằng cách cho phép lưu trữ dữ liệu của người dùng trên server để sử dụng về sau ( như username, món hàng ...)Tuy nhiên những thông tin session này chỉ là tạm thời và thường bị xoá đi ngay khi người dùng rời khỏi trang web đã dùng session.
Chính vì tính tạm thời này mà nếu bứng dụng của bạn cần thiết lưu trữ dữ liệu 1 cách lâu dài , bạn hãy dùng các cách lưu trữ khác như là csdl Mysql

Session hoạt động bằng cách tạo 1 chuỗi unique (UID) cho từng vistore và chứa thông tin dựa trên ID đó. việc này sẽ giúp tránh tình trạng dữ liệu bị xung đột giữa các user
Lưu ý: Nếu bạn vẫn còn ít kinh nghiệm về việc dùng session trong ứng dụng thì ko nên dùng nó trên các website đòi hỏi bảo mật cao vì rất dễ gây ra các lỗ hổng bảo mật nguy hiểm
Bắt đầu với PHP Session
Việc đầu tiên trước khi bạn làm bất cứ việc gì với session là bạn phải chạy nó trước, và nó dc đặt ngay trên đầu trong code của bạn, trước khi HTML dc xuất ra

Dưới đây là 1 ví dụ đơn giản về việc tạo session trong PHP

PHP Code:
Code: [Select]
<?php
session_start
(); // start up your PHP session! 
?>

đoạn mã ngắn trên sẽ đăng kí cho ng dùng 1 session ở trên Server, cho phép bạn lưu thông thông tin của ng dùng và đưa nó vào UID cho session của user đó

Lưu giá trị của session

Khi bạn muốn lưu trữ 1 thông tin nào đó ở session, dc dùng như 1 mảng kết hợp. đó là nơi bạn lưu và lấy dữ liệu ra. sau đây là 1 ví dụ đơn giản cho việc đơn giản này ^^

PHP Code:
Code: [Select]
<?php
session_start
(); 
$_SESSION['views'] = 1// lưu views
echo "Pageviews = "$_SESSION['views']; //lấy views và hiện thị
?>
output:
Pageviews = 1

trong ví dụ này, chúng ta đã học dc cách lưu trữ của biến session thông qua mảng kết hợp $_SESSION và cũng như cách lấy nó ra :)

Sử dụng SESSION

Bây giờ chúng ta đã biết cách lưu và lấy dử liệu từ biến $_SESSION, mọi chuyện thật dễ dàng phải ko :D, và tiếp theo ta sẽ tìm hiểu 1 vài hàm liên qua đến session.
Khi bạn tạo 1 biến và lưu nó vào 1 session, bạn có lẽ muốn dùng nó sau này, tuy nhiên, trước khi bạn dùng biến session đó, bạn nên kiểm tra nó đã dc khởi tạo hay chưa.

Thao tác này được thực hiện thông qua hàm isset, isset là 1 hàm kiểm tra bất kì biến nào và nó đã dc khởi tạo và gán giá trị hay chưa.

Qua nhưng ví dụ trên, chúng ta có thể tạo 1 bộ đếm đơn giản cho 1 trang bằng cách sử dùng isset để kiểm tra nó đa dc tạo hay chưa và gán giá trị cho nó. Đây là 1 ví dụ:

PHP Code:
Code: [Select]
<?php
session_start
();  
if(isset(
$_SESSION['views']))
    
$_SESSION['views'] = $_SESSION['views']+ 1;
else
    
$_SESSION['views'] = 1;

echo 
"views = "$_SESSION['views']; 
?>

Trong lần chạy đầu tiền của trangm câu lệnh If sẽ trả về false vì chưa có biến session [views] nào được tạo cả. tuy nhiên, khi bạn refresh lại trang đó, thì câu lệnh if sẽ trả về giá trị true và biến đếm counter sẽ tăng lên 1 đơn vị. và sẽ tăng cho mỗi lần chạy của trang đó lên 1.

Xóa và Hủy Session

Mặt dù dữ liệu trong session chỉ mang tính chất tạm thời và nó ko yêu cầu phải xóa sau khi sử dụng, nhưng có thể trong trường hợp nào đó bạn phải xóa dữ liệu của nó cho mục đích của bạn.
Hãy tưởng tượng bạn đang điều hành 1 doanh nghiệp online, và 1 thanh viên đang dùng website của bạn mua 1 món hàng. Thành viên đó đã hoàn tất việc mua hàng (phiên giao dịch) trên website, do đó , bạn phải xóa mọi thứ trong session sau khi việc này hoàn tất.

PHP Code:
Code: [Select]
<?php
session_start
();  
if(isset(
$_SESSION['cart']))
    unset(
$_SESSION['cart']); 
?>

Bạn cũng có thể hủy hoàn toàn các session bằng cách gọi hàng session_destroy

PHP Code:
Code: [Select]
<?php
session_start
(); 
session_destroy();
?>

Destroy sẽ reset session của bạn, do đó không nên gọi hàm này trước khi bạn còn muốn thao tác lên dữ liệu chứa trong session đó.


Translated by KenyLieou
Nguồn : http://www.tizag.com/phpT/phpsessions.php
« Last Edit: April 23, 2008, 10:31:55 AM by KenyLieou »
+ PHPVN Supporter or Spamer :D 
+ Email: kenylieou@gmail.com. Please feel free to contact me

cyb3rsp3c

  • PHP Intermediate
  • *
  • Posts: 42
    • Yahoo Instant Messenger - el3c7r0n
    • View Profile
    • My materials , tutorials, notes about IT
Re: Sử dụng Session trong PHP
« Reply #1 on: April 21, 2008, 08:30:06 PM »
hehe , www.tizag.com , trang này đọc hay đấy , lúc mình mới làm quen cũng đọc qua ở đây :P , nice job , cố gắng nhé

KenyLieou

  • Global Moderator
  • PHP Intermediate
  • *****
  • Posts: 908
  • Nothing's Impossible
    • MSN Messenger - kiensuy2000@hotmail.com
    • View Profile
    • Email
Re: Sử dụng Session trong PHP
« Reply #2 on: April 23, 2008, 10:14:07 AM »
cuối cùng cũng dịch xong, lolz
+ PHPVN Supporter or Spamer :D 
+ Email: kenylieou@gmail.com. Please feel free to contact me

doangia

  • Administrator
  • PHP Intermediate
  • *****
  • Posts: 1099
  • Hữu Tâm Ắt Thành Tựu
    • View Profile
    • Doan Gia
    • Email
Re: Sử dụng Session trong PHP
« Reply #3 on: April 23, 2008, 10:27:00 AM »
Tớ có chỉnh sửa chút ít ;D .... ko biết có xung đột gì ko ;D
Cần Thơ Gạo Trắng Nước Trong
Đến Chơi Mang Dép Chân Không Đi Về ...

KenyLieou

  • Global Moderator
  • PHP Intermediate
  • *****
  • Posts: 908
  • Nothing's Impossible
    • MSN Messenger - kiensuy2000@hotmail.com
    • View Profile
    • Email
Re: Sử dụng Session trong PHP
« Reply #4 on: April 23, 2008, 10:32:43 AM »
không có xung đột gì ^^ Thanks Bác doangia.
+ PHPVN Supporter or Spamer :D 
+ Email: kenylieou@gmail.com. Please feel free to contact me

NguoiDauKho

  • PHP Intermediate
  • *
  • Posts: 120
    • View Profile
    • Email
Re: Sử dụng Session trong PHP
« Reply #5 on: August 04, 2008, 09:17:39 AM »
Tui có 1 câu hỏi
Muốn đặt thời gian cho SESSION tồn tại thì làm thế nào

troinau

  • PHP Starter
  • *
  • Posts: 3
    • View Profile
    • Email
Re: Sử dụng Session trong PHP
« Reply #6 on: October 11, 2010, 11:34:56 AM »
cho em hỏi là trang nào cũng phải để session_start() !

KenyLieou

  • Global Moderator
  • PHP Intermediate
  • *****
  • Posts: 908
  • Nothing's Impossible
    • MSN Messenger - kiensuy2000@hotmail.com
    • View Profile
    • Email
Re: Sử dụng Session trong PHP
« Reply #7 on: October 11, 2010, 11:41:02 AM »
@troinau: đúng rồi bạn
+ PHPVN Supporter or Spamer :D 
+ Email: kenylieou@gmail.com. Please feel free to contact me

thienha20

  • PHP Intermediate
  • *
  • Posts: 227
    • View Profile
Re: Sử dụng Session trong PHP
« Reply #8 on: November 12, 2010, 11:52:52 AM »
set time out của session thì vào php.ini hoặc dùng $_SESSION['timeout'] = time();
+Nhận chỉnh sửa, viết addon cscart , opencart từ a->z
+Nhận bảo trì, sửa chữa website với bất kỳ cms hay FW nào miễn không bị mã hóa
Liên hệ : 01266371311

billythekids

  • PHP Intermediate
  • *
  • Posts: 363
    • MSN Messenger - billyboxviet@hotmail.de
    • AOL Instant Messenger - billythekids
    • Yahoo Instant Messenger - billythekidsde@yahoo.com
    • View Profile
Re: Sử dụng Session trong PHP
« Reply #9 on: November 20, 2010, 05:33:35 PM »
@NguoiDauKho mở php.ini ra mà chỉnh á, kô thì thử làm cái ini_set('session.gc_maxlifetime', thời gian bao nhieu đó);

chucphuc

  • PHP Starter
  • *
  • Posts: 3
    • View Profile
Re: Sử dụng Session trong PHP
« Reply #10 on: March 07, 2011, 06:56:01 PM »
khẩn cấp
khẩn cấp :D
$_Session và $_SESSION có khác gì nhau hở mấy bác?
sao e để $_Session thì không chạy
mà để $_SESSION như mấy bác thì nó chạy ngon lành ?
làm mò đờ người oe oe oe 

chucphuc

  • PHP Starter
  • *
  • Posts: 3
    • View Profile
Re: Sử dụng Session trong PHP
« Reply #11 on: March 07, 2011, 07:14:34 PM »
à mà e vẫn mù mờ thằng session này quá
session có phải là
Ví dụ mình đăng ký thành viên trên trang này
điền đầy đủ, bấm vào submit thì nó báo lỗi
trở lại trang đăng ký thì nó vẫn chứa thông tin trên các trường như
username
email
chứng thực
...
đó có phải là session không các bác?

saothienta

  • PHP Intermediate
  • *
  • Posts: 1014
  • darkmovies.4vn.in
    • View Profile
    • Darkmovies
    • Email
Re: Sử dụng Session trong PHP
« Reply #12 on: March 07, 2011, 07:32:28 PM »
$_SESSION mới đúng đa phần các biến chính của hệ thống đều viết hoa.
($_SESSION, $_GET, $_POST...)
Về lập trình yêu cầu rất nghiêm khắc về chữ hoa và thường.
Về vấn đề thứ 2 thì cái đó không phải là session.
Hãy nắm tay cùng đưa ngày coder VN đi lên.
Cùng tạo nên chỗ đứng cho VN
Hãy bắt đầu điều đó tại đây:darkmovies.4vn.in bộ 4rom mã nguồn mở đầu tiên của VN

chucphuc

  • PHP Starter
  • *
  • Posts: 3
    • View Profile
Re: Sử dụng Session trong PHP
« Reply #13 on: March 07, 2011, 07:40:52 PM »
oài
đó là biến của hệ thống
thế mà e cứ tưởng biến tự đặt tên chớ
thanks bác nhiều :D
Còn vấn đề thứ 2
có ai cho ví dụ dùm mình với
mù mờ quá

billythekids

  • PHP Intermediate
  • *
  • Posts: 363
    • MSN Messenger - billyboxviet@hotmail.de
    • AOL Instant Messenger - billythekids
    • Yahoo Instant Messenger - billythekidsde@yahoo.com
    • View Profile
Re: Sử dụng Session trong PHP
« Reply #14 on: March 08, 2011, 02:07:18 PM »
cái bạn hỏi vấn đề thứ 2 là nó sử dụng chính lại các giá trị bạn post lên server sau khi post lên kiểm tra sai tra về lại trái cũ thì nó lấy giá trị tùy theo form của bạn post lên theo method gì.
Vi du
<form method='POST' action='abc.php'>
<input type="name" value="<?php echo $_POST['name']; ?>" />
</form>

Khi form dc khai báo method post thì khi trở lại trang đó cái value nó sẽ nhận lại giá trị của post.name và trả lại vào value của form chính nhờ vậy người ta hiển thị lại giá trị trước đó user nhậm vào.