Một cách khác để làm cho dữ liệu có thể truy cập được trên các trang khác nhau của toàn bộ trang web là sử dụng Phiên PHP.
Một phiên tạo một tệp trong thư mục tạm thời trên máy chủ nơi các biến phiên đã đăng ký và giá trị của chúng được lưu trữ. Dữ liệu này sẽ có sẵn cho tất cả các trang trên trang web trong lần truy cập đó.
Vị trí của tệp tạm thời được xác định bởi một cài đặt trong tệp php.ini được gọi là session.save_path . Trước khi sử dụng bất kỳ biến phiên nào, hãy đảm bảo rằng bạn đã thiết lập đường dẫn này.
Khi một phiên được bắt đầu, những điều sau đây sẽ xảy ra:
Đầu tiên PHP tạo một mã định danh duy nhất cho phiên cụ thể đó là một chuỗi ngẫu nhiên gồm 32 số thập lục phân, chẳng hạn như 3c7foj34c3jj973hjkop2fc937e3443.
Cookie có tên PHPSESSID được tự động gửi đến máy tính của người dùng để lưu trữ chuỗi nhận dạng phiên duy nhất.
Tệp được tạo tự động trên máy chủ trong thư mục tạm thời được chỉ định và mang tên của số nhận dạng duy nhất có tiền tố là sess_ ie sess_3c7foj34c3jj973hjkop2fc937e3443.
Khi một tập lệnh PHP muốn truy xuất giá trị từ một biến phiên, PHP sẽ tự động lấy chuỗi định danh phiên duy nhất từ cookie PHPSESSID và sau đó tìm tệp mang tên đó trong thư mục tạm thời của nó và việc xác thực có thể được thực hiện bằng cách so sánh cả hai giá trị.
Một phiên kết thúc khi người dùng mất trình duyệt hoặc sau khi rời khỏi trang web, máy chủ sẽ kết thúc phiên sau một khoảng thời gian định trước, thường là 30 phút.
Một phiên PHP có thể dễ dàng bắt đầu bằng cách gọi hàm session_start(), trước tiên hàm này sẽ kiểm tra xem một phiên đã được bắt đầu chưa và nếu chưa có phiên nào được bắt đầu thì nó sẽ bắt đầu một phiên. Bạn nên đặt lệnh gọi tới session_start() ở đầu trang.
Các biến phiên được lưu trữ trong mảng kết hợp được gọi là $ _SESSION [] . Các biến này có thể được truy cập trong suốt thời gian tồn tại của một phiên.
Ví dụ sau đây bắt đầu một phiên, sau đó đăng ký một biến được gọi là bộ đếm được tăng lên mỗi khi trang được truy cập trong phiên.
Sử dụng hàm isset() để kiểm tra xem biến phiên đã được thiết lập hay chưa.
Đặt mã này vào tệp test.php và tải tệp này nhiều lần để xem kết quả -
<?php session_start(); if( isset( $_SESSION['counter'] ) ) { $_SESSION['counter'] += 1; }else { $_SESSION['counter'] = 1; } $msg = "You have visited this page ". $_SESSION['counter']; $msg .= "in this session."; ?> <html> <head> <title>Setting up a PHP session</title> </head> <body> <?php echo ( $msg ); ?> </body> </html>
Nó sẽ tạo ra kết quả sau:
You have visited this page 1in this session.
Một PHP session có thể bị hủy bởi hàm session_destroy() . Hàm này không cần bất kỳ đối số nào và một lệnh gọi có thể hủy tất cả các biến phiên. Nếu bạn muốn hủy một biến phiên duy nhất thì bạn có thể sử dụng hàm unset() để hủy đặt một biến phiên.
Đây là ví dụ để hủy đặt một biến duy nhất -
<?php unset($_SESSION['counter']); ?>
Đây là lệnh gọi sẽ hủy tất cả các biến phiên -
<?php session_destroy(); ?>
Bạn không cần gọi hàm start_session() để bắt đầu một phiên khi người dùng truy cập trang web của bạn nếu bạn có thể đặt biến session.auto_start thành 1 trong tệp php.ini .
Có thể có trường hợp người dùng không cho phép lưu trữ cookie trên máy của họ. Vì vậy, có một phương pháp khác để gửi ID phiên đến trình duyệt.
Ngoài ra, bạn có thể sử dụng SID không đổi được xác định nếu phiên bắt đầu. Nếu khách hàng không gửi cookie phiên thích hợp, nó có dạng session_name = session_id. Nếu không, nó mở rộng thành một chuỗi rỗng. Do đó, bạn có thể nhúng nó vào URL vô điều kiện.
Ví dụ sau minh họa cách đăng ký một biến và cách liên kết chính xác đến một trang khác bằng SID.
<?php session_start(); if (isset($_SESSION['counter'])) { $_SESSION['counter'] = 1; }else { $_SESSION['counter']++; } $msg = "You have visited this page ". $_SESSION['counter']; $msg .= "in this session."; echo ( $msg ); ?> <p> To continue click following link <br /> <a href = "nextpage.php?<?php echo htmlspecialchars(SID); ?>"> </p>
Nó sẽ tạo ra kết quả sau:
You have visited this page 1in this session. To continue click following link
Htmlspecialchars () có thể được sử dụng khi in SID để ngăn chặn các cuộc tấn công liên quan đến XSS.
Đăng nhận xét