Một session phiên trong PHP là gì

Phiên là một chu trình người dùng gửi yêu cầu lên server và được server hồi đáp. Sau khi server hồi đáp trả lại trang nó sẽ đóng kết nối. Vậy nên những phiên làm việc sau đó web server không thể kết nối các phiên làm việc với nhau để phục vụ công việc nào đó.

SESSION LÀ GÌ?

  • Session dùng theo dõi và kết nối giữa các phiên làm việc của người dùng
  • Thông tin của session được lưu trữ trong mảng hệ thống $_SESSION
  • Session dùng để tạo các ứng dụng giỏ hàng, đăng nhập

THAO TÁC VỚI SESSION

1.Tạo Session

2. Cách lấy giá trị SESSION

3. Cách hủy Session

GHI NHỚ

  • Session dùng kết nối các phiên làm việc của người dùng
  • Session được sử dụng xây dựng ứng dụng giỏ hàng, đăng nhập, đăng ký
  • Sử dụng session qua các thao tác thêm, sửa, xóa session

BÀI TẬP

1.Xây dựng ứng dụng lưu phiên đăng nhập người dùng

2.Xây dựng ứng dụng lưu thông tin giỏ hàng

//hocweb123.com/huong-dan-lam-viec-voi-session-trong-php.html

Session và Cookie dùng để lưu trữ dữ liệu tạm thời và từ đó hệ thống có thể đưa ra những quyết định về quyền hạn hoặc là những tùy chọn riêng tư. Cả hai tuy có chung chức năng là lưu trữ dữ liệu nhưng bên trong nó lại khác nhau. Session dùng để lưu trữ dữ liệu trên Server và đồng thời nó sẽ có một đoạn code dữ liệu được lưu trữ ở client [cookie]. Còn Cookie thì lưu trữ dữ liệu trên máy Client. Để hiểu rõ hơn thì ta phải vào tìm hiểu cụ thể.

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Biến Session trong PHP được dùng để lưu trữ thông tin của người dùng hoặc là lưu trữ tùy chọn cấu hình hệ thống cho người dùng. Đặc biệt mỗi client sẽ có một ID session khác nhau nên việc thông tin Session ở Client A bị ảnh hưởng qua Client B là điều không thể. Thông thường chúng ta sử dụng Session để lưu thông tin đăng nhập, giỏ hàng hoặc những dữ liệu mang tính chất tạm thời và mỗi client sẽ có dư liệu khác nhau.

Đăng ký session

Trước khi bạn sử dụng session bạn phải khai báo cho PHP biết bằng cách đặt dòng lệnh session_start[] phía trên đầu mỗi file. Nếu bạn dùng nhiều file include lẫn nhau thì đặt nó ở file chính.

Ví dụ:

Bài viết này được đăng tại [free tuts .net]

TODO write content

Dòng lệnh session_start[] sẽ đăng ký phiên làm việc của người dùng trên Server, từ đó Server sẽ tạo ra một ID riêng không trùng lặp để nhận diện cho client hiện tại. Dòng này bắt buộc có.

Lưu trữ session

Tất cả Session được lưu trữ trong biến toàn cục $_SESSION, vì thể để lưu thêm dữ liệu Session hay là thay đổi dữ liệu của Session thì ta sẽ thao tác trên biến đó. Lưu ý với bạn trước khi dùng phép lấy giá trị Session bạn phải kiểm tra sesion đó có tồn tại không rồi hãy lấy.

Để lưu một giá trị mới vào Session ta dùng cú pháp như sau: $_SESSION['session_name'] = $session_value

Để lấy giá trị Session ta dùng cú pháp sau: $tenbien = $_SESSION['session_name']. Như tôi đề cập ở trên trước khi bạn lấy giá trị Session bạn nên kiểm tra nó có tồn tại không rồi hãy lấy.

Ví dụ:

Bạn tạo một file session.php và copy nội dung này vào:


Bạn hãy nhập tên vào sau đó nhấn vào button Lưu Sessoin. sau đó bạn refresh lại trang bạn sẽ thấy thông tin bạn đã được lưu trữ trên Server nên có hiển thị ra.

Xóa session

Tất cả các giá trị Session đều lưu trữ trong biến $_SESSION nên để xóa nó các bạn chỉ việc dùng hàm unset[$_SESSION['session_name']], trong đó hàm unset dùng để giải phóng một biến ra khỏi bộ nhớ.

Nếu bạn muốn xóa hết tất cả các Session thì ta dùng hàm session_destroy[].

Ví dụ:

// Xóa session name unset[$_SESSION['name']]; // Xóa hết session session_destroy[];

Còn rất nhiều hàm khác các bạn tham khảo tại đây.

2. Cookie trong PHP

Cookie thường được dùng để lưu trữ các tùy chọn riêng của trang web từng user, nó là một file nhỏ được Server chỉ định lưu trữ trên máy tính của Client và PHP có thể truy xuất tới được. Và để sử dụng được Cookie thì trình duyệt phải hỗ trợ chức năng này, nếu không thì Cookie trở nên vô dụng.

Cookie sẽ không bị mất khi bạn đóng ứng dụng, nó phụ thuộc vào thời gian sống mà bạn thiết lập cho nó. Ví dụ bạn thiết lập Cookie lưu trữ thông tin đăng nhập trong vòng 15 phút thì sau 15 phút mà bạn không có một thao tác thay đổi trên nó thì Cookie của bạn sẽ bị chết. Đây chính là sự lợi hại của việc sư dụng Cookie.

Lưu trữ Cookie

Để lưu trữ Cookie ta dùng cú pháp sau và phải đặt trước thẻ html: setcookie[$name, $value, $expire, $path, $domain].

Trong đó:

  • $name: là tên của Cookie
  • $value: giá trị của Cookie
  • $expire: thời gian sống của Cookie
  • $path : đường dẫn lưu trữ Cookie
  • $domain: tên của domain

Ví dụ: lưu trữ tên đăng nhập username = ‘thehalfheart’ trong một giờ

Lấy giá trị Cookie

Tất cả Cookie được lưu trữ trong biến toàn cục $_COOKIE nên để lấy giá trị Cookie ta dùng cú pháp sau: $bien = $_COOKIE['cookie_name']. Cũng như lưu ý ở phần Session bạn nên kiểm tra có tồn tại Cookie không trước khi lấy nhé, nếu không sẽ bị thông báo lỗi nếu nó không tồn tại.

Ví dụ: Lấy giá tri username vừa lưu trữ ở trên

if [isset[$_COOKIE['username']]] { echo $_COOKIE['username']; }

Xóa Cookie

Để xóa Cookie bạn chỉ việc thiết lập thời gian sống của nó sang quá trị âm nhiều hơn hoặc bằng giá trị sống lúc bạn thiết lập.

Ví dụ: xóa Cookie đã thiết lập ở trên

setcookie["username", "", time[]-3600];

Lời Kết

Bài này chúng ta đã nghiên cứu được 2 cách lưu trữ dữ liệu tạm thời của người dùng đó là Session và Cookie. Những ví dụ trên rất căn bản nhưng thực tết rất hay sử dụng, nếu các bạn muốn tìm hiểu sâu hơn thì lên PHP.NET để tìm hiểu. Nhưng mình nghĩ các bạn hiện tại chưa rành nhiều nên chỉ cần biết bấy nhiêu đó là đủ.

Sử dụng được session và hiểu về nó là điều quan trong trong lập trình web, hôm nay mình sẽ giới thiệu về cách sử dụng session cơ bản. Bài viết được dịch từ chương 28 của quyển PHP Notes For Professionals.

1. session_start[] options

Bắt đầu với PHP session, chúng ta có thể truyền vào 1 mảng với session-based php.ini options tới hàm sessionstart

Ví dụ 1:

if [version_compare[PHP_VERSION, '7.0.0'] >= 0] { session_start[[ 'cache_limiter' => 'private', 'read_and_close' => true, ]]; } else { session_start[]; }

Ở bản này cũng giới thiệu một setting mới trong php.ini gọi là session.lazy_write, với giá trị mặc định là true và định nghĩa rằng session data là chỉ được ghi lại nếu nó thay đổi.

Ref: //wiki.php.net/rfc/session-lock-ini

2. Sesssion locking

Chúng ta đều biết rằng PHP ghi session data vào file ở phía server. Khi 1 request được tạo tới php script [cái mà khởi tạo session qua session_start[]], PHP khóa session file để block hoặc đợi những request khác đang đến đối với cùng session_id để hoàn thành nó, bởi vì những request khác có thể bị nghẽn trong session_start cho đến khi hoặc trừ khi session file đã bị khóa không được bỏ ra.

Session file vẫn bị khóa đến khi script được hoàn thành hoặc session được đóng bằng tay. Để tránh trường hợp ví dụ như tránh nhiều request bị block, chúng ta có thể khởi tạo session và đóng sesion cái mà sẽ bỏ khóa từ session file và cho phép tiếp tục các request còn lại.

Ví dụ 2:

session_start[]; $_SESSION['id'] = 123; session_write_close[];

Giờ chúng ta sẽ là nếu session bị đóng thì làm sao để đọc được những giá trị trong session đó, tuy nhiên dù sau khi session bị đóng thì session vẫn còn. Do đó, chúng ta vẫn đọc được session data.

Từ php >= 7.0, chúng ta có thể có read_only session, read_write session, lazy_write sesion, do đó nó ko yêu cầu cần phải sử dụng sessionwriteclose[]

3. Manipulating session data

Biến $_SESSION là 1 array, và chúng ta có thể nhận được và xử lý nó như 1 mảng thông thường.

Ví dụ 3:

session_start[]; $_SESSION['id'] = 342; if[!isset[$_SESSION["login"]]] { echo "Please login first"; exit; } $user = $_SESSION["login"]; $name = $_SESSION['name'] ?? 'Anonymous';

Chú ý rằng nếu bạn lưu 1 object trong session, nó sẽ nhận và chỉ khi bạn có 1 class autoloader hoặc bạn đã load class đó. Các trường hợp khác, object sẽ lưu dưới dạng __PHP_Incomplete_Class, có thể dẫn tới crashes app

Warning: Session có thể bị tấn công. Do đó, không bao giờ nên lưu thông tin người dùng trong session. Đặc biệt với thẻ tin dụng, các thông tin id, password, nhưng cũng có thể sử dụng với 1 vài thông tin public như tên tuổi, email, số điẹnt thoại ...

4. Destroy an entire session

Nếu đã lấy được session, ta sẽ muốn có thể hủy bỏ được nó. Điều này được làm dễ dàng với session_destroy[] Ví dụ:

session_start[]; $_SESSION = array[]; if [ini_get["session.use_cookies"]] { $params = session_get_cookie_params[]; setcookie[session_name[], '', time[] - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] ]; } session_destroy[];

Sử dụng sessiondestroy khác với sử dụng những thứ như $_SESSION = array[] Nó sẽ bỏ hết giá trị lưu trong session global nhưng nó sẽ không hủy phiên bản được lưu thực sự của session.

Chú ý: Chúng ta có thể dùng session_unset[] cho code cũ không sử dụng được $_SESSION.

5. Safe Session Start With no Errors

Nhiều lập trình viên gặp phải vấn đề này khi làm việc với dự án lớn, đặc biết nếu họ làm việc trên những nền tảng CMS dựa trên plugin, addons, components ... Đây là solution cho khởi tạo session an toàn mà ta sẽ kiểm tra phiên bản PHP đầu tiên để cover tất cả các phiên bản và tiếp đó thì mới khởi tạo session. Nếu session không tồn tại thì ta sẽ khởi tạo session an toàn. Nếu session tồn tại thì sẽ không có gì xảy ra cả.

Ví dụ:

if [version_compare[PHP_VERSION, '7.0.0'] >= 0] { if[session_status[] == PHP_SESSION_NONE] { session_start[array[ 'cache_limiter' => 'private', 'read_and_close' => true, ]]; } } else if [version_compare[PHP_VERSION, '5.4.0'] >= 0] { if [session_status[] == PHP_SESSION_NONE] { session_start[]; } } else { if[session_id[] == ''] { session_start[]; } }

Nó sẽ giúp bạn không bị session_start error

6. Session name

Kiểm tra nếu session cookie đã được khởi tạo chưa

Session name là tên củ cookie được sử dụng để lưu session. Bạn có thể sử dụng nó để phát hiện nếu cookie cho session đã được khởi tạo cho người dùng.

if[isset[$_COOKIE[session_name[]]]] { session_start[]; }

Chú ý rằng phương thức này thường không hữu dụng trừ khi bạn không muốn tạo cookie không cần thiết.

Thay đổi session name

Bạn có thể cập nhật session name bằng cách gọi session_name[]

session_name['newname']; session_start[];

Nếu không có tham số truyền vào thì session name hiện tại sẽ được trả về.

Video liên quan

Chủ Đề