Hiển thị tên phiên php

Khi một trang web trở nên phức tạp hơn, mã hỗ trợ nó cũng phải như vậy. Khi bạn đến giai đoạn mà trang web của bạn cần chuyển dữ liệu người dùng từ trang này sang trang khác, có lẽ đã đến lúc bắt đầu nghĩ đến việc sử dụng các phiên PHP

Một trang web HTML bình thường sẽ không truyền dữ liệu từ trang này sang trang khác. Nói cách khác, tất cả thông tin sẽ bị quên khi một trang mới được tải. Điều này gây ra một vấn đề khá lớn đối với các tác vụ như giỏ hàng, yêu cầu dữ liệu [sản phẩm đã chọn của người dùng] phải được ghi nhớ từ trang này sang trang khác

Phiên PHP giải quyết vấn đề này bằng cách cho phép bạn lưu trữ thông tin người dùng trên máy chủ để sử dụng sau này [i. e. tên người dùng, mặt hàng trong giỏ hàng, v.v.]. Tuy nhiên, thông tin phiên này là tạm thời và thường bị xóa rất nhanh sau khi người dùng rời khỏi trang web sử dụng phiên

Điều quan trọng là phải cân nhắc xem bộ nhớ tạm thời của phiên có áp dụng cho trang web của bạn hay không. Nếu bạn cần một bộ lưu trữ lâu dài hơn, bạn sẽ cần tìm một giải pháp khác, chẳng hạn như cơ sở dữ liệu MySQL

Phiên hoạt động bằng cách tạo số nhận dạng [UID] duy nhất cho mỗi khách truy cập và lưu trữ các biến dựa trên ID này. Điều này giúp ngăn dữ liệu của hai người dùng bị nhầm lẫn với nhau khi truy cập cùng một trang web

Ghi chú. Nếu bạn chưa có kinh nghiệm lập trình phiên, bạn không nên sử dụng phiên trên trang web yêu cầu bảo mật cao, vì có những lỗ hổng bảo mật cần một số kỹ thuật nâng cao để khắc phục.

Trước khi bạn có thể bắt đầu lưu trữ thông tin người dùng trong phiên PHP của mình, trước tiên bạn phải bắt đầu phiên. Khi bạn bắt đầu một phiên, phiên này phải ở ngay đầu mã của bạn, trước khi bất kỳ HTML hoặc văn bản nào được gửi đi

Dưới đây là một tập lệnh đơn giản mà bạn nên đặt ở đầu mã PHP để bắt đầu phiên PHP

Mã PHP

Đoạn mã nhỏ này sẽ đăng ký phiên của người dùng với máy chủ, cho phép bạn bắt đầu lưu thông tin người dùng và gán UID [số nhận dạng duy nhất] cho phiên của người dùng đó

Khi bạn muốn lưu trữ dữ liệu người dùng trong một phiên, hãy sử dụng mảng kết hợp $_SESSION. Đây là nơi bạn lưu trữ và truy xuất dữ liệu phiên. Trong các phiên bản trước của PHP, có nhiều cách khác để thực hiện thao tác cửa hàng này, nhưng nó đã được cập nhật và đây là cách chính xác để thực hiện

Mã PHP

Trưng bày

Trong ví dụ này, chúng ta đã học cách lưu trữ một biến vào mảng kết hợp phiên $_SESSION và cả cách truy xuất dữ liệu từ cùng một mảng đó

Bây giờ bạn có thể lưu trữ và truy xuất dữ liệu từ mảng $_SESSION, chúng ta có thể khám phá một số chức năng thực sự của phiên. Khi bạn tạo một biến và lưu trữ nó trong một phiên, bạn có thể muốn sử dụng nó trong tương lai. Tuy nhiên, trước khi bạn sử dụng một biến phiên, bạn cần kiểm tra xem nó đã tồn tại chưa

Đây là nơi hàm isset của PHP có ích. isset là một hàm lấy bất kỳ biến nào bạn muốn sử dụng và kiểm tra xem nó đã được đặt chưa. Tức là nó đã được gán giá trị rồi

Với ví dụ trước của chúng tôi, chúng tôi có thể tạo bộ đếm số lần xem trang rất đơn giản bằng cách sử dụng isset để kiểm tra xem biến số lần xem trang đã được tạo chưa. Nếu có, chúng ta có thể tăng bộ đếm của mình. Nếu nó không tồn tại, chúng tôi có thể tạo bộ đếm số lần xem trang và đặt nó thành một. Đây là mã để hoàn thành công việc này

Mã PHP

Lần đầu tiên bạn chạy tập lệnh này trên trình duyệt mới mở, câu lệnh if sẽ không thành công vì chưa có chế độ xem biến phiên nào được lưu trữ. Tuy nhiên, nếu bạn làm mới trang, câu lệnh if sẽ đúng và bộ đếm sẽ tăng thêm một. Mỗi lần bạn chạy lại tập lệnh này, bạn sẽ thấy lượt xem tăng lên một

Mặc dù dữ liệu của một phiên là tạm thời và không yêu cầu bạn phải tự dọn dẹp một cách rõ ràng, nhưng bạn có thể muốn xóa một số dữ liệu cho các tác vụ khác nhau của mình

Hãy tưởng tượng rằng bạn đang điều hành một doanh nghiệp trực tuyến và một người dùng đã sử dụng trang web của bạn để mua hàng hóa của bạn. Người dùng vừa hoàn thành một giao dịch trên trang web của bạn và bây giờ bạn muốn xóa mọi thứ khỏi giỏ hàng của họ

Mã PHP

Bạn cũng có thể hủy hoàn toàn phiên làm việc bằng cách gọi hàm session_destroy

Mã PHP

Hủy sẽ đặt lại phiên của bạn, vì vậy đừng gọi chức năng đó trừ khi bạn hoàn toàn cảm thấy thoải mái khi mất tất cả dữ liệu phiên đã lưu trữ của mình

Nếu bạn muốn tải xuống bản PDF của hướng dẫn này, hãy xem Sách điện tử PHP của chúng tôi từ Tizag. cửa hàng com. In nó ra, viết lên đó, đăng những bài học yêu thích của bạn lên tường của bạn

Thành phần Symfony HttpFoundation có một hệ thống con phiên rất mạnh mẽ và linh hoạt, được thiết kế để cung cấp khả năng quản lý phiên thông qua giao diện hướng đối tượng rõ ràng bằng nhiều trình điều khiển lưu trữ phiên.

Các phiên được sử dụng thông qua triển khai Phiên của giao diện SessionInterface

thận trọng

Đảm bảo phiên PHP của bạn chưa bắt đầu trước khi sử dụng lớp Phiên. Nếu bạn có hệ thống phiên kế thừa bắt đầu phiên của mình, hãy xem Phiên kế thừa

ví dụ nhanh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use Symfony\Component\HttpFoundation\Session\Session;

$session = new Session[];
$session->start[];

// set and get session attributes
$session->set['name', 'Drak'];
$session->get['name'];

// set flash messages
$session->getFlashBag[]->add['notice', 'Profile updated'];

// retrieve messages
foreach [$session->getFlashBag[]->get['notice', []] as $message] {
    echo '
'.$message.'
'
; }

Ghi chú

Các phiên Symfony được thiết kế để thay thế một số hàm PHP gốc. Các ứng dụng nên tránh sử dụng

1
2
3
4
5
6
7
8
9
10
11
12
8,
1
2
3
4
5
6
7
8
9
10
11
12
9,
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;

$session = new Session[new NativeSessionStorage[], new AttributeBag[]];
$session->set['token', 'a6c1e0b6'];
// ...
$token = $session->get['token'];
// if the attribute may or may not exist, you can define a default value for it
$token = $session->get['attribute-name', 'default-attribute-value'];
// ...
$session->clear[];
0,
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;

$session = new Session[new NativeSessionStorage[], new AttributeBag[]];
$session->set['token', 'a6c1e0b6'];
// ...
$token = $session->get['token'];
// if the attribute may or may not exist, you can define a default value for it
$token = $session->get['attribute-name', 'default-attribute-value'];
// ...
$session->clear[];
1 và
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;

$session = new Session[new NativeSessionStorage[], new AttributeBag[]];
$session->set['token', 'a6c1e0b6'];
// ...
$token = $session->get['token'];
// if the attribute may or may not exist, you can define a default value for it
$token = $session->get['attribute-name', 'default-attribute-value'];
// ...
$session->clear[];
2 và thay vào đó hãy sử dụng các API trong phần sau

Ghi chú

Mặc dù nên bắt đầu một phiên một cách rõ ràng, nhưng một phiên sẽ thực sự bắt đầu theo yêu cầu, nghĩa là, nếu bất kỳ yêu cầu phiên nào được thực hiện để đọc/ghi dữ liệu phiên

thận trọng

Phiên Symfony không tương thích với chỉ thị

use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;

$session = new Session[new NativeSessionStorage[], new AttributeBag[]];
$session->set['token', 'a6c1e0b6'];
// ...
$token = $session->get['token'];
// if the attribute may or may not exist, you can define a default value for it
$token = $session->get['attribute-name', 'default-attribute-value'];
// ...
$session->clear[];
3
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;

$session = new Session[new NativeSessionStorage[], new AttributeBag[]];
$session->set['token', 'a6c1e0b6'];
// ...
$token = $session->get['token'];
// if the attribute may or may not exist, you can define a default value for it
$token = $session->get['attribute-name', 'default-attribute-value'];
// ...
$session->clear[];
4 Cần tắt chỉ thị này trong
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;

$session = new Session[new NativeSessionStorage[], new AttributeBag[]];
$session->set['token', 'a6c1e0b6'];
// ...
$token = $session->get['token'];
// if the attribute may or may not exist, you can define a default value for it
$token = $session->get['attribute-name', 'default-attribute-value'];
// ...
$session->clear[];
3, trong chỉ thị máy chủ web hoặc trong
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;

$session = new Session[new NativeSessionStorage[], new AttributeBag[]];
$session->set['token', 'a6c1e0b6'];
// ...
$token = $session->get['token'];
// if the attribute may or may not exist, you can define a default value for it
$token = $session->get['attribute-name', 'default-attribute-value'];
// ...
$session->clear[];
6

Lớp Phiên triển khai SessionInterface

Phiên có API sau, được chia thành một vài nhóm

Bắt đầu phiên - không sử dụng
1
2
3
4
5
6
7
8
9
10
11
12
8. Tạo lại ID phiên - không sử dụng
1
2
3
4
5
6
7
8
9
10
11
12
9. Phương thức này có thể tùy ý thay đổi thời gian tồn tại của cookie mới sẽ được phát ra bằng cách gọi phương thức này. Xóa tất cả dữ liệu phiên và tạo lại ID phiên. Không sử dụng
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;

$session = new Session[new NativeSessionStorage[], new AttributeBag[]];
$session->set['token', 'a6c1e0b6'];
// ...
$token = $session->get['token'];
// if the attribute may or may not exist, you can define a default value for it
$token = $session->get['attribute-name', 'default-attribute-value'];
// ...
$session->clear[];
2. Nhận ID phiên. Không sử dụng
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;

$session = new Session[new NativeSessionStorage[], new AttributeBag[]];
$session->set['token', 'a6c1e0b6'];
// ...
$token = $session->get['token'];
// if the attribute may or may not exist, you can define a default value for it
$token = $session->get['attribute-name', 'default-attribute-value'];
// ...
$session->clear[];
0. Đặt ID phiên. Không sử dụng
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;

$session = new Session[new NativeSessionStorage[], new AttributeBag[]];
$session->set['token', 'a6c1e0b6'];
// ...
$token = $session->get['token'];
// if the attribute may or may not exist, you can define a default value for it
$token = $session->get['attribute-name', 'default-attribute-value'];
// ...
$session->clear[];
0. Lấy tên phiên. Không sử dụng
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;

$session = new Session[new NativeSessionStorage[], new AttributeBag[]];
$session->set['token', 'a6c1e0b6'];
// ...
$token = $session->get['token'];
// if the attribute may or may not exist, you can define a default value for it
$token = $session->get['attribute-name', 'default-attribute-value'];
// ...
$session->clear[];
1. Đặt tên phiên. Không sử dụng
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;

$session = new Session[new NativeSessionStorage[], new AttributeBag[]];
$session->set['token', 'a6c1e0b6'];
// ...
$token = $session->get['token'];
// if the attribute may or may not exist, you can define a default value for it
$token = $session->get['attribute-name', 'default-attribute-value'];
// ...
$session->clear[];
1

Các thuộc tính phiên được lưu trữ nội bộ trong một "Túi", một đối tượng PHP hoạt động giống như một mảng. Chúng có thể được đặt, xóa, kiểm tra, v.v. sử dụng các phương thức được giải thích sau trong bài viết này cho lớp

34. Nhìn thấy

Ngoài ra, một số phương pháp tồn tại để quản lý "Túi"

Đăng ký một SessionBagInterface. Nhận SessionBagInterface theo tên túi. Nhận giao diện FlashBag. Đây chỉ là một phím tắt cho thuận tiện

Nhận MetadataBag chứa thông tin về phiên

Quản lý phiên của PHP yêu cầu sử dụng siêu toàn cầu

35, tuy nhiên, điều này cản trở phần nào khả năng kiểm tra và đóng gói mã trong mô hình OOP. Để giúp khắc phục điều này, Symfony sử dụng các túi phiên được liên kết với phiên để đóng gói một tập dữ liệu cụ thể gồm các thuộc tính hoặc thông báo flash

Cách tiếp cận này cũng giảm thiểu ô nhiễm không gian tên trong siêu toàn cầu

35 vì mỗi túi lưu trữ tất cả dữ liệu của nó dưới một không gian tên duy nhất. Điều này cho phép Symfony cùng tồn tại một cách hòa bình với các ứng dụng hoặc thư viện khác có thể sử dụng siêu toàn cầu 
35 và tất cả dữ liệu vẫn hoàn toàn tương thích với quản lý phiên của Symfony

Symfony cung cấp hai loại túi lưu trữ, với hai cách triển khai riêng biệt. Mọi thứ được viết dựa trên giao diện để bạn có thể mở rộng hoặc tạo các loại túi của riêng mình nếu cần

SessionBagInterface có API sau chủ yếu dành cho mục đích nội bộ

Trả về khóa mà túi cuối cùng sẽ lưu trữ mảng của nó trong
35. Nói chung, giá trị này có thể được để mặc định và được sử dụng nội bộ. Điều này được gọi nội bộ bởi các lớp lưu trữ phiên Symfony để liên kết dữ liệu túi với phiên. Trả về tên của túi phiên. Xóa dữ liệu khỏi túi

Mục đích của các túi triển khai AttributeBagInterface là để xử lý lưu trữ thuộc tính phiên. Điều này có thể bao gồm những thứ như ID người dùng và cài đặt đăng nhập "Ghi nhớ tôi" hoặc thông tin trạng thái dựa trên người dùng khác

AttributeBagĐây là triển khai mặc định tiêu chuẩn

AttributeBagInterface có API

Đặt một thuộc tính theo tên [
39]. Nhận thuộc tính theo tên [
90] và có thể xác định giá trị mặc định khi thuộc tính không tồn tại [
91]. Nhận tất cả các thuộc tính dưới dạng một mảng kết hợp của 
92. Trả về 
93 nếu thuộc tính tồn tại. Đặt nhiều thuộc tính cùng một lúc bằng cách sử dụng một mảng kết hợp [
92]. Nếu các thuộc tính tồn tại, chúng sẽ được thay thế; . Xóa một thuộc tính theo tên và trả về giá trị của nó. Xóa tất cả các thuộc tính

Ví dụ

1
2
3
4
5
6
7
8
9
10
11
12
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;

$session = new Session[new NativeSessionStorage[], new AttributeBag[]];
$session->set['token', 'a6c1e0b6'];
// ...
$token = $session->get['token'];
// if the attribute may or may not exist, you can define a default value for it
$token = $session->get['attribute-name', 'default-attribute-value'];
// ...
$session->clear[];

Bất kỳ hệ thống lưu trữ khóa-giá trị đơn giản nào cũng bị giới hạn trong phạm vi dữ liệu phức tạp có thể được lưu trữ vì mỗi khóa phải là duy nhất. Bạn có thể đạt được không gian tên bằng cách giới thiệu quy ước đặt tên cho các phím để các phần khác nhau trong ứng dụng của bạn có thể hoạt động mà không xung đột. Ví dụ:

95 và 
96. Tuy nhiên, đôi khi điều này không thực tế lắm khi dữ liệu thuộc tính là một mảng, ví dụ như một tập hợp các mã thông báo. Trong trường hợp này, việc quản lý mảng trở thành gánh nặng vì bạn phải truy xuất mảng sau đó xử lý và lưu trữ lại

3____29

Vì vậy, mọi quá trình xử lý này có thể nhanh chóng trở nên xấu xí, thậm chí thêm mã thông báo vào mảng

0
1

Mục đích của FlashBagInterface là cung cấp cách cài đặt và truy xuất thư trên cơ sở mỗi phiên. Quy trình công việc thông thường sẽ là đặt thông báo flash trong yêu cầu và hiển thị chúng sau khi chuyển hướng trang. Ví dụ: người dùng gửi biểu mẫu chạm vào bộ điều khiển cập nhật và sau khi xử lý, bộ điều khiển sẽ chuyển hướng trang đến trang được cập nhật hoặc trang lỗi. Thông báo flash được đặt trong yêu cầu trang trước đó sẽ được hiển thị ngay trong lần tải trang tiếp theo cho phiên đó. Tuy nhiên, đây chỉ là một ứng dụng cho tin nhắn flash

AutoExpireFlashBagTrong quá trình triển khai này, các thông báo được đặt trong một lần tải trang sẽ chỉ khả dụng để hiển thị trong lần tải trang tiếp theo. Những tin nhắn này sẽ tự động hết hạn bất kể chúng có được truy xuất hay không. FlashBagTrong quá trình triển khai này, các thư sẽ vẫn còn trong phiên cho đến khi chúng được truy xuất hoặc xóa một cách rõ ràng. Điều này cho phép sử dụng bộ nhớ đệm ESI

FlashBagInterface có API

Thêm một tin nhắn flash vào ngăn xếp của loại đã chỉ định. Đặt nhấp nháy theo loại; . Nhận đèn flash theo loại và xóa những đèn flash đó khỏi túi. Đặt tất cả các đèn flash, chấp nhận một mảng có khóa của các mảng
99. Nhận tất cả các đèn flash [dưới dạng một mảng có khóa] và xóa các đèn flash khỏi túi. Nhận nhấp nháy theo loại [chỉ đọc]. Nhận tất cả các flash [chỉ đọc] dưới dạng một mảng có khóa. Trả về true nếu kiểu tồn tại, false nếu không. Trả về một mảng các loại flash được lưu trữ. xóa túi

Đối với các ứng dụng đơn giản, thường chỉ cần có một tin nhắn flash cho mỗi loại, ví dụ: thông báo xác nhận sau khi biểu mẫu được gửi. Tuy nhiên, các tin nhắn flash được lưu trữ trong một mảng có khóa bởi flash

00, điều đó có nghĩa là ứng dụng của bạn có thể đưa ra nhiều tin nhắn cho một loại nhất định. Điều này cho phép sử dụng API để nhắn tin phức tạp hơn trong ứng dụng của bạn

Chủ Đề