12/08/2018, 18:26

[Laravel 5.6] HTTP session

Giới thiệu Từ khi các ứng dụng lập trình có sử dụng giao thức HTTP trở lên "stateless" hơn, thì session cung cấp một cách để lưu trữ thông tin của các user qua nhiều request. Để giải thích cho từ "stateless", mình cũng phải đi lần mò theo kiểu what does stateless mean? Rồi, http stateless what ...

Giới thiệu

Từ khi các ứng dụng lập trình có sử dụng giao thức HTTP trở lên "stateless" hơn, thì session cung cấp một cách để lưu trữ thông tin của các user qua nhiều request.

Để giải thích cho từ "stateless", mình cũng phải đi lần mò theo kiểu what does stateless mean? Rồi, http stateless what is it?... cuối cùng thì cũng cung cấp được cho các bạn thông tin nên hiểu stateless như thế nào. Về mặt cơ bản, hiểu chung chung, thì HTTP stateless nghĩa nó trong mô hình client-sever nói chung, thông qua tương tác HTTP, ví dụ như client gửi (GET http://abcdef.example), thì bên sever sẽ không hề lưu trữ bất kỳ thông tin nào của bên client. Nghĩa là khi nhận được request, bên sever sẽ response trên request đó, nó không quan tâm request đó đến từ đâu, và nó cũng không quan tâm việc có nhiều request từ 1 client. Bài toán đặt ra là, khi mỗi request cần phải authenticate, thì việc đó phải lặp đi lặp lại trên mỗi request, vì phía sever không hề lưu trữ thông tin gì của client, do đó nó cứ phải lặp đi lặp lại việc kiểm tra điều này với mỗi request được gửi đến.

Để hiểu dễ dàng hơn, chúng ta đến với một câu chuyện thực tế, giả sử bạn có người yêu sống tại một khu ký túc xá, mỗi lần đến thăm người yêu của bạn, đến cổng gặp bảo vệ tòa nhà, bạn đều phải gọi người yêu của bạn ra xác thực, rồi mới được vào. Điều này có vẻ không là vấn đề gì lớn, nhưng cụ thể chỉ cần bạn bước một chân khỏi cổng ký túc xá, rồi quay lại hôn tạm biệt người yêu của bạn, thì bạn cần được người yêu xác nhận là đáng tin cậy, để bước vào ký túc. Haiz. Cuộc đời nó mới rắc rối làm sao.

Như vậy session sinh ra là một cách để bảo vệ nhận diện khuôn mặt của bạn là đáng tin cậy vì đã được người yêu xác nhận một lần rồi, lần sau bạn vào, trong khoảng thời gian còn "đáng được tin cậy" thì bạn có thể ra vào tòa nhà một cách thoải mái.

Laravel cung cấp một số các cách thức phổ biến để sử dụng session trong back-end là MemcachedRedis.

Configuration

Các config của session trong laravel được lưu trữ ở file config/session.php. Bạn có thể xem qua các option trong file này. Mặc định, Laravel sẽ cấu hình session driver là "file", nó hoạt động không được tốt lắm với nhiều ứng dụng, bạn có thể cân nhắc việc sử dụng memcached hoặc redis để tăng hiệu xuất (performance) của session.

Các option của Session driver sẽ định nghĩa nơi mà dữ liệu session sẽ được lưu trữ trên mỗi request. Laravel đưa ra một vài driver như sau:

  • file - các sessions được lưu trữ tại storage/framework/sessions
  • cookie- các session được lưu trữ một các bảo mật, được mã hóa cookies.
  • database- các session được lưu trữ trong một cơ sở dữ liệu quan hệ.
  • memcached/redis - các session được lưu trữ trên bộ nhớ đệm hoặc bộ nhớ cache.
  • array - các session được lưu trữ trong một mảng php và không được duy trì lâu dài.

            </div>
            
            <div class=

0