PHP có chức năng cốt lõi session_destroy[] để xóa tất cả các giá trị phiên. Đây là một hàm không đối số đơn giản trả về giá trị boolean true hoặc false
ID phiên PHP được lưu trữ trong cookie theo mặc định. Nói chung, tệp cookie phiên đó có tên là PHPSESSID. Hàm session_destroy sẽ không bỏ đặt id phiên trong cookie
Để hủy phiên 'hoàn toàn', ID phiên cũng phải được bỏ đặt
Ví dụ nhanh này sử dụng session_destroy[] để hủy phiên. Nó sử dụng phương thức set_cookie[] để hủy toàn bộ bằng cách hết hạn ID phiên PHP
Trong hướng dẫn này, bạn sẽ học cách lưu trữ tạm thời một số dữ liệu nhất định trên máy chủ bằng cách sử dụng phiên PHP
Phiên là gì
Mặc dù bạn có thể lưu trữ dữ liệu bằng cookie nhưng nó có một số vấn đề về bảo mật. Vì cookie được lưu trữ trên máy tính của người dùng nên kẻ tấn công có thể dễ dàng sửa đổi nội dung cookie để chèn dữ liệu có thể gây hại vào ứng dụng của bạn, điều này có thể làm hỏng ứng dụng của bạn
Ngoài ra, mỗi khi trình duyệt yêu cầu một URL đến máy chủ, tất cả dữ liệu cookie cho một trang web sẽ tự động được gửi đến máy chủ trong yêu cầu. Điều đó có nghĩa là nếu bạn đã lưu trữ 5 cookie trên hệ thống của người dùng, mỗi cookie có kích thước 4KB, trình duyệt cần tải lên 20KB dữ liệu mỗi khi người dùng xem một trang, điều này có thể ảnh hưởng đến hiệu suất trang web của bạn
Bạn có thể giải quyết cả hai vấn đề này bằng cách sử dụng phiên PHP. Phiên PHP lưu trữ dữ liệu trên máy chủ thay vì máy tính của người dùng. Trong môi trường dựa trên phiên, mọi người dùng được xác định thông qua một số duy nhất được gọi là mã định danh phiên hoặc SID. ID phiên duy nhất này được sử dụng để liên kết từng người dùng với thông tin của riêng họ trên máy chủ như email, bài đăng, v.v.
Mẹo. ID phiên được tạo ngẫu nhiên bởi công cụ PHP, gần như không thể đoán được. Hơn nữa, vì dữ liệu phiên được lưu trữ trên máy chủ nên nó không phải được gửi với mọi yêu cầu của trình duyệt
Bắt đầu một phiên PHP
Trước khi bạn có thể lưu trữ bất kỳ thông tin nào trong các biến phiên, trước tiên bạn phải khởi động phiên. Để bắt đầu một phiên làm việc mới, chỉ cần gọi hàm PHP
20. Nó sẽ tạo một phiên mới và tạo ID phiên duy nhất cho người dùngMã PHP trong ví dụ bên dưới chỉ đơn giản là bắt đầu một phiên làm việc mới
Đầu tiên, hàm
20 kiểm tra xem phiên đã tồn tại chưa bằng cách tìm kiếm sự hiện diện của ID phiên. Nếu nó tìm thấy một, tôi. e. nếu phiên đã bắt đầu, nó sẽ thiết lập các biến phiên và nếu không, nó sẽ bắt đầu một phiên mới bằng cách tạo ID phiên mớiGhi chú. Bạn phải gọi hàm
20 ở đầu trang i. e. trước bất kỳ đầu ra nào được tạo bởi tập lệnh của bạn trong trình duyệt, giống như cách bạn thực hiện khi đặt cookie bằng chức năng 23Lưu trữ và truy cập dữ liệu phiên
Bạn có thể lưu trữ tất cả dữ liệu phiên của mình dưới dạng các cặp khóa-giá trị trong mảng siêu toàn cục
24. Dữ liệu được lưu trữ có thể được truy cập trong suốt thời gian tồn tại của phiên. Hãy xem xét tập lệnh sau, tập lệnh này tạo phiên mới và đăng ký hai biến phiênĐể truy cập dữ liệu phiên mà chúng tôi đã đặt trong ví dụ trước từ bất kỳ trang nào khác trên cùng một miền web — chỉ cần tạo lại phiên bằng cách gọi
20 rồi chuyển khóa tương ứng vào mảng kết hợp 1Mã PHP trong ví dụ trên tạo ra đầu ra sau
Ghi chú. Để truy cập dữ liệu phiên trong cùng một trang, không cần phải tạo lại phiên vì nó đã được bắt đầu ở đầu trang
Phá hủy một phiên
Nếu bạn muốn xóa dữ liệu phiên nhất định, chỉ cần bỏ đặt khóa tương ứng của mảng kết hợp
1, như minh họa trong ví dụ sauTuy nhiên, để hủy hoàn toàn một phiên, chỉ cần gọi hàm
3. Hàm này không cần bất kỳ đối số nào và một lệnh gọi sẽ hủy tất cả dữ liệu phiênGhi chú. Trước khi hủy một phiên bằng hàm
3, trước tiên bạn cần tạo lại môi trường phiên nếu nó chưa có ở đó bằng cách sử dụng hàm 20 để có thứ gì đó cần hủyMỗi phiên PHP có một giá trị thời gian chờ — thời lượng, được tính bằng giây — xác định thời gian một phiên sẽ tồn tại trong trường hợp không có bất kỳ hoạt động nào của người dùng. Bạn có thể điều chỉnh khoảng thời gian chờ này bằng cách thay đổi giá trị của biến
6 trong tệp cấu hình PHP [7]Vì các ứng dụng điều khiển HTTP là không trạng thái, các phiên cung cấp một cách để lưu trữ thông tin về người dùng qua nhiều yêu cầu. Thông tin người dùng đó thường được đặt trong một cửa hàng/phụ trợ liên tục có thể được truy cập từ các yêu cầu tiếp theo
Laravel cung cấp nhiều phụ trợ phiên được truy cập thông qua API thống nhất, rõ ràng. Hỗ trợ cho các chương trình phụ trợ phổ biến như Memcached, Redis và cơ sở dữ liệu được bao gồm
Cấu hình
Tệp cấu hình phiên của ứng dụng của bạn được lưu trữ tại
12. Hãy chắc chắn xem xét các tùy chọn có sẵn cho bạn trong tệp này. Theo mặc định, Laravel được cấu hình để sử dụng trình điều khiển phiên 13, trình điều khiển này sẽ hoạt động tốt cho nhiều ứng dụng. Nếu ứng dụng của bạn sẽ được cân bằng tải trên nhiều máy chủ web, thì bạn nên chọn một kho lưu trữ tập trung mà tất cả các máy chủ đều có thể truy cập, chẳng hạn như Redis hoặc cơ sở dữ liệuTùy chọn cấu hình phiên
14 xác định nơi dữ liệu phiên sẽ được lưu trữ cho mỗi yêu cầu. Laravel xuất xưởng với một số trình điều khiển tuyệt vời- 13 - phiên được lưu trữ trong 16
- 17 - phiên được lưu trữ trong cookie được mã hóa, an toàn
- 18 - phiên được lưu trữ trong cơ sở dữ liệu quan hệ
- 19 / 90 - các phiên được lưu trữ tại một trong những cửa hàng dựa trên bộ nhớ cache nhanh này
- 91 - phiên được lưu trữ trong AWS DynamoDB
- 92 - các phiên được lưu trữ trong một mảng PHP và sẽ không được duy trì
Lưu ý
Trình điều khiển mảng chủ yếu được sử dụng trong quá trình thử nghiệm và ngăn không cho dữ liệu được lưu trữ trong phiên được duy trì.
Điều kiện tiên quyết của trình điều khiển
cơ sở dữ liệu
Khi sử dụng trình điều khiển phiên
18, bạn sẽ cần tạo một bảng để chứa các bản ghi phiên. Ví dụ khai báo 94 cho bảng có thể được tìm thấy bên dưới4Bạn có thể sử dụng lệnh Artisan
95 để tạo quá trình di chuyển này. Để tìm hiểu thêm về di chuyển cơ sở dữ liệu, bạn có thể tham khảo tài liệu di chuyển đầy đủlàm lại
Trước khi sử dụng phiên Redis với Laravel, bạn cần cài đặt tiện ích mở rộng PhpRedis PHP qua PECL hoặc cài đặt gói
96 [~1. 0] qua Nhà soạn nhạc. Để biết thêm thông tin về cấu hình Redis, tham khảo tài liệu Redis của LaravelLưu ý
97, tùy chọn 98 có thể được sử dụng để chỉ định kết nối Redis nào được phiên sử dụng.
Trong tệp cấu hình
Tương tác với phiên
Truy xuất dữ liệu
Có hai cách chính để làm việc với dữ liệu phiên trong Laravel. trình trợ giúp toàn cầu
97 và thông qua phiên bản 00. Đầu tiên, hãy xem xét việc truy cập phiên thông qua một phiên bản 00, có thể được gợi ý kiểu trên một phương thức đóng tuyến hoặc bộ điều khiển. Hãy nhớ rằng, các phụ thuộc phương thức của bộ điều khiển được tự động đưa vào thông qua bộ chứa dịch vụ của Laravel2Khi bạn truy xuất một mục từ phiên, bạn cũng có thể chuyển một giá trị mặc định làm đối số thứ hai cho phương thức
02. Giá trị mặc định này sẽ được trả về nếu khóa được chỉ định không tồn tại trong phiên. Nếu bạn chuyển một bao đóng làm giá trị mặc định cho phương thức 02 và khóa được yêu cầu không tồn tại, bao đóng sẽ được thực thi và kết quả của nó được trả về1Trình trợ giúp phiên toàn cầu
Bạn cũng có thể sử dụng hàm PHP
97 toàn cầu để truy xuất và lưu trữ dữ liệu trong phiên. Khi trình trợ giúp 97 được gọi với một đối số chuỗi, nó sẽ trả về giá trị của khóa phiên đó. Khi người trợ giúp được gọi với một mảng các cặp khóa/giá trị, các giá trị đó sẽ được lưu trữ trong phiên9Lưu ý
97 toàn cầu. Cả hai phương pháp đều có thể kiểm tra được thông qua phương pháp 07 có sẵn trong tất cả các trường hợp thử nghiệm của bạn.
Có rất ít sự khác biệt thực tế giữa việc sử dụng phiên thông qua phiên bản yêu cầu HTTP so với việc sử dụng trình trợ giúp
Truy xuất tất cả dữ liệu phiên
Nếu bạn muốn truy xuất tất cả dữ liệu trong phiên, bạn có thể sử dụng phương pháp
080Xác định xem một mục có tồn tại trong phiên không
Để xác định xem một mục có trong phiên hay không, bạn có thể sử dụng phương pháp
09. Phương thức 09 trả về 51 nếu mục hiện diện và không phải là 525Để xác định xem một mục có xuất hiện trong phiên hay không, ngay cả khi giá trị của nó là
52, bạn có thể sử dụng phương pháp 540Để xác định xem một mục không có trong phiên, bạn có thể sử dụng phương pháp
55. Phương thức 55 trả về 51 nếu không có mặt hàng4Lưu trữ dữ liệu
Để lưu trữ dữ liệu trong phiên, thông thường bạn sẽ sử dụng phương thức
58 của phiên bản yêu cầu hoặc trình trợ giúp toàn cầu 977Đẩy vào các giá trị phiên mảng
Phương thức
00 có thể được sử dụng để đẩy một giá trị mới vào một giá trị phiên là một mảng. Ví dụ: nếu khóa 01 chứa một mảng tên nhóm, bạn có thể đẩy một giá trị mới vào mảng như vậyTruy xuất và xóa một mục
Phương thức
02 sẽ truy xuất và xóa một mục khỏi phiên trong một câu lệnh20Tăng và giảm giá trị phiên
Nếu dữ liệu phiên của bạn chứa một số nguyên mà bạn muốn tăng hoặc giảm, bạn có thể sử dụng các phương thức
03 và 0421Dữ liệu flash
Đôi khi bạn có thể muốn lưu trữ các mục trong phiên cho yêu cầu tiếp theo. Bạn có thể làm như vậy bằng cách sử dụng phương pháp
05. Dữ liệu được lưu trữ trong phiên sử dụng phương pháp này sẽ có sẵn ngay lập tức và trong yêu cầu HTTP tiếp theo. Sau yêu cầu HTTP tiếp theo, dữ liệu được flash sẽ bị xóa. Dữ liệu flash chủ yếu hữu ích cho các thông báo trạng thái tồn tại trong thời gian ngắn22Nếu bạn cần duy trì dữ liệu flash của mình cho một số yêu cầu, bạn có thể sử dụng phương pháp
06, phương pháp này sẽ giữ tất cả dữ liệu flash cho một yêu cầu bổ sung. Nếu bạn chỉ cần giữ dữ liệu flash cụ thể, bạn có thể sử dụng phương pháp 0723Để duy trì dữ liệu flash của bạn chỉ cho yêu cầu hiện tại, bạn có thể sử dụng phương pháp
0824Xóa dữ liệu
Phương pháp
09 sẽ xóa một phần dữ liệu khỏi phiên. Nếu bạn muốn xóa tất cả dữ liệu khỏi phiên, bạn có thể sử dụng phương pháp 4025Tạo lại ID phiên
Việc tạo lại ID phiên thường được thực hiện để ngăn người dùng độc hại khai thác cuộc tấn công cố định phiên trên ứng dụng của bạn
Laravel tự động tạo lại ID phiên trong quá trình xác thực nếu bạn đang sử dụng một trong các bộ khởi động ứng dụng Laravel hoặc Laravel Fortify;
26Nếu bạn cần tạo lại ID phiên và xóa tất cả dữ liệu khỏi phiên trong một câu lệnh, bạn có thể sử dụng phương pháp
4227Chặn phiên
Cảnh báo
19, 91, 90 và 18. Ngoài ra, bạn không được sử dụng trình điều khiển phiên 17.
Để sử dụng tính năng chặn phiên, ứng dụng của bạn phải sử dụng trình điều khiển bộ đệm hỗ trợ khóa nguyên tử. Hiện tại, các trình điều khiển bộ nhớ cache đó bao gồm trình điều khiển
Theo mặc định, Laravel cho phép các yêu cầu sử dụng cùng một phiên thực hiện đồng thời. Vì vậy, ví dụ: nếu bạn sử dụng thư viện JavaScript HTTP để thực hiện hai yêu cầu HTTP cho ứng dụng của mình, thì cả hai yêu cầu đó sẽ thực thi cùng một lúc. Đối với nhiều ứng dụng, đây không phải là vấn đề;
Để giảm thiểu điều này, Laravel cung cấp chức năng cho phép bạn giới hạn các yêu cầu đồng thời cho một phiên nhất định. Để bắt đầu, bạn có thể chỉ cần xâu chuỗi phương thức
48 vào định nghĩa tuyến đường của mình. Trong ví dụ này, một yêu cầu đến điểm cuối 49 sẽ nhận được khóa phiên. Trong khi khóa này đang được giữ, mọi yêu cầu gửi đến các điểm cuối 49 hoặc 71 có chung ID phiên sẽ đợi yêu cầu đầu tiên thực hiện xong trước khi tiếp tục thực hiện.28Phương thức
48 chấp nhận hai đối số tùy chọn. Đối số đầu tiên được phương thức 48 chấp nhận là số giây tối đa mà khóa phiên sẽ được giữ trước khi được giải phóng. Tất nhiên, nếu yêu cầu kết thúc thực thi trước thời điểm này, khóa sẽ được giải phóng sớm hơnĐối số thứ hai được phương thức
48 chấp nhận là số giây mà một yêu cầu phải đợi trong khi cố gắng lấy khóa phiên. Một 75 sẽ bị ném nếu yêu cầu không thể có được khóa phiên trong số giây đã choNếu cả hai đối số này đều không được thông qua, khóa sẽ được lấy trong tối đa 10 giây và các yêu cầu sẽ đợi tối đa 10 giây trong khi cố gắng lấy khóa
29Thêm trình điều khiển phiên tùy chỉnh
Triển khai trình điều khiển
Nếu không có trình điều khiển phiên hiện có nào phù hợp với nhu cầu của ứng dụng của bạn, thì Laravel có thể viết trình xử lý phiên của riêng bạn. Trình điều khiển phiên tùy chỉnh của bạn nên triển khai
76 tích hợp sẵn của PHP. Giao diện này chỉ chứa một vài phương thức đơn giản. Triển khai MongoDB sơ khai trông giống như sau10Lưu ý
77 để chứa 78.
Laravel không cung cấp thư mục chứa tiện ích mở rộng của bạn. Bạn có thể tự do đặt chúng ở bất cứ đâu bạn thích. Trong ví dụ này, chúng tôi đã tạo một thư mục
Vì mục đích của các phương pháp này không dễ hiểu, nên hãy nhanh chóng đề cập đến chức năng của từng phương pháp
- Phương pháp 79 thường được sử dụng trong các hệ thống lưu trữ phiên dựa trên tệp. Vì Laravel cung cấp trình điều khiển phiên 13, bạn sẽ hiếm khi cần đặt bất cứ thứ gì vào phương thức này. Bạn chỉ cần để trống phương thức này
- Phương pháp 01, giống như phương pháp 79, cũng thường có thể bị bỏ qua. Đối với hầu hết các trình điều khiển, nó không cần thiết
- Phương thức 03 sẽ trả về phiên bản chuỗi của dữ liệu phiên được liên kết với 04 đã cho. Không cần thực hiện bất kỳ tuần tự hóa hoặc mã hóa nào khác khi truy xuất hoặc lưu trữ dữ liệu phiên trong trình điều khiển của bạn, vì Laravel sẽ thực hiện tuần tự hóa cho bạn
- Phương thức 05 sẽ ghi chuỗi 06 đã cho được liên kết với 04 vào một số hệ thống lưu trữ liên tục, chẳng hạn như MongoDB hoặc hệ thống lưu trữ khác mà bạn chọn. Một lần nữa, bạn không nên thực hiện bất kỳ tuần tự hóa nào - Laravel sẽ xử lý việc đó cho bạn
- Phương pháp 08 sẽ xóa dữ liệu được liên kết với 04 khỏi bộ lưu trữ liên tục
- Phương pháp 200 sẽ hủy tất cả dữ liệu phiên cũ hơn 201 đã cho, đây là dấu thời gian UNIX. Đối với các hệ thống tự hết hạn như Memcached và Redis, phương thức này có thể để trống
Đăng ký tài xế
Khi trình điều khiển của bạn đã được triển khai, bạn đã sẵn sàng để đăng ký nó với Laravel. Để thêm các trình điều khiển bổ sung vào phụ trợ phiên của Laravel, bạn có thể sử dụng phương pháp
202 được cung cấp bởi mặt tiền 203. Bạn nên gọi phương thức 202 từ phương thức 205 của nhà cung cấp dịch vụ. Bạn có thể làm điều này từ 206 hiện có hoặc tạo một nhà cung cấp hoàn toàn mới11Khi trình điều khiển phiên đã được đăng ký, bạn có thể sử dụng trình điều khiển
207 trong tệp cấu hình 12 của mình