Hướng dẫn dùng session.save_handler redis trong PHP

Hướng dẫn dùng session.save_handler redis trong PHP

Bài viết này sẽ hướng dẫn bạn cách Cấu Hình PHP Session Cache Trên Redis. Nếu bạn cần hỗ trợ, xin vui lòng liên hệ VinaHost qua Hotline 1900 6046 ext.3, email về hoặc chat với VinaHost qua livechat https://livechat.vinahost.vn/chat.php.

Redis là gì?

Hướng dẫn dùng session.save_handler redis trong PHP

Redis là hệ thống mã nguồn mở dùng để lưu trữ và ghi cache dạng key-value. Ngoài ra, nó cũng được dùng như một server cấu trúc dữ liệu nhờ vào khả năng hỗ trợ nhiều loại dữ liệu khác nhau như hashes, lists, sets, and bitmaps, và nhiều loại khác.

Redis còn hỗ trợ clustering (hai hoặc nhiều server hoạt động đồng thời), điều này dẫn đến việc Redis thường được dùng trong môi trường yêu cầu tính sẵn sàng cao (high availability) và độ linh hoạt cao (scalable).

Hướng dẫn dùng session.save_handler redis trong PHP

Trên máy tính, khi ta thực hiện truy cập một ứng dụng và thực hiện một thay đổi nào đó rồi đóng lại, đó là một session. Máy tính sẽ biết được ta là ai, ta làm gì, ta bắt đầu và kết thúc công việc đó vào lúc nào. Tuy nhiên trên môi trường internet, webserver không biết ta là ai, không biết ta làm gì vì HTTP không duy trì trạng thái (ví dụ: ta đăng nhập vào trang chủ, nhưng khi bấm vào một trang con thì webserver sẽ thấy ta như một người dùng khác xa lạ và load các thuộc tính mặc định).

Session được sinh ra để giải quyết vấn đề trên bằng cách lưu trữ thông tin người dùng để sử dụng trên nhiều trang khác nhau (username, theme, màu sắc website…). Mặc định, session sẽ duy trì cho tới khi người dùng đóng trình duyệt.

Session handler là gì?

Session handler chịu trách nhiệm lưu trữ và truy xuất dữ liệu được lưu trong session. Mặc định, PHP sử dụng kiểu dữ liệu file cho việc này. Trong môi trường sử dụng nhiều webserver phục vụ cho việc xử lý PHP, file lưu trữ session sẽ được nằm rải rác ở các webserver, khiến thông tin người dùng không nhất quán khi truy cập website.

Dưới đây là cấu hình session handler mặc định trong file php.ini:

session.save_handler = files
session.save_path = "/tmp"

Vì vậy, một giải pháp session handler bên ngoài (không lưu trữ local dưới dạng file) được dùng để đảm bảo tính mở rộng (scalable) cho hệ thống đó là lưu trữ tập trung vào một (hoặc nhiều) redis server.

Hướng dẫn cấu hình PHP session cache trên redis

  • Cài đặt redis:

# yum install epel-release

# yum install redis

hoặc

# apt-get install redis-server

  • Khởi động dịch vụ redis:

# systemctl restart redis

hoặc

# systemctl restart redis-server

  • Cấu hình cho redis tự khởi động cùng hệ thống:

# systemctl enable redis

hoặc

# systemctl enable redis-server

  • Cấu hình cho redis lắng nghe bằng một IP khác (thay vì IP localhost 127.0.01) để các server khác có thể truy cập từ ngoài vào. Cụ thể, ta mở file /etc/redis.conf, chỉnh sửa dòng sau:

# Cũ

bind 127.0.0.1

# Mới

bind 192.168.100.10

Lưu ý: Ở ví dụ trên, ta đang cấu hình để redis lắng nghe bằng địa chỉ IP local 192.168.100.10, tức là tất cả các server có IP local cùng range với IP này đều có thể truy cập tới redis trên server này. Trong quá trình sử dụng, ta hạn chế việc sử dụng IP public của server để lắng nghe hoặc nếu có dùng thì phải cấu hình firewall chỉ cho phép một số IP nhất định được phép truy cập, vì redis là đối tượng rất dễ bị lợi dụng và tấn công.

  • Cài đặt extension php-redis trên webserver:

# yum install php-redis

hoặc

# apt-get install php-redis

  • Mở file cấu hình PHP (php.ini) của bản PHP đang sử dụng và chỉnh sửa các dòng sau:

# nano /etc/php.ini

session.save_handler = redis

session.save_path = "tcp://192.168.100.10:6379”

Trong đó:

192.168.100.10: là địa chỉ IP của server có cài đặt redis

6379: là port hoạt động của redis

  • Restart lại dịch vụ web:

# systemctl restart httpd (nếu sử dụng Apache)

hoặc

# systemctl restart php-fpm (nếu sử dụng php-fpm)

VinaHost chúc bạn thực hiện thành công!

Was this article helpful?