it-swarm-vi.com

Ghi đè phiên php mặc định

Tôi đang xây dựng một ứng dụng AngularJs sử dụng j Joomla trong nền. Ứng dụng AngularJs được tải một lần và sau đó gọi máy chủ luôn thông qua ajax. Một số cuộc gọi xảy ra đồng thời. Nếu tôi đang sử dụng mặc định PHP phiên trong các cuộc gọi đó, php sẽ xử lý một cuộc gọi cùng một lúc. Vì vậy, tôi đã viết trình xử lý Phiên của riêng mình để cho phép nhiều cuộc gọi cùng một lúc và tôi muốn sử dụng nó thay cho Phiên php mặc định. Có cách nào dễ dàng để làm điều này trong Joomla không hoặc tôi sẽ phải viết lớp JSession của riêng mình?

Chỉnh sửa

<?php
    session_start();
    sleep(10);
    echo "Hello";
?>

Nếu bạn gọi tệp này hai lần trong cùng một trình duyệt trong cùng một thời gian, cuộc gọi đầu tiên sẽ trở lại sau 10 giây, cuộc gọi thứ hai sẽ trở lại sau 20 giây. Lớp JSession gọi session_start (), vì vậy j Joomla có hành vi tương tự.

Chỉnh sửa

Khi chúng tôi sử dụng tùy chọn cơ sở dữ liệu hoặc mở rộng JSessionStorage bằng trình xử lý phiên riêng, j Joomla sử dụng session_set_save_handler() và nó thay đổi hành vi mặc định của khóa phiên. Vì vậy, tôi đã sai khi nói rằng để gọi session_start liên quan đến việc khóa phiên.

3
csbenjamin

Bạn không phải viết lớp JSession của riêng mình, nhưng bạn sẽ cần viết một lớp mở rộng JSessionStorage để tích hợp với xử lý phiên của Joomla.

Rất có thể bạn sẽ gặp rắc rối khi cố gắng đặt trình xử lý phiên qua máng Cấu hình toàn cầu. Ghi đè JFormFieldSessionHandler bằng phiên bản bao gồm trình xử lý của bạn hoặc chỉ định thủ công trong configuration.php. Tuy nhiên, tùy chọn thứ hai có nghĩa là bạn có thể gặp rắc rối khi bạn cố gắng sử dụng Cấu hình toàn cầu trong tương lai.

3
Rouven Weßling

Chỉnh sửa: Nó đường nối mà câu trả lời là không chính xác.

Trình xử lý phiên Joomla (Cơ sở dữ liệu) mặc định không khóa phiên trong khi xử lý. Vì vậy, bạn không phải lo lắng về việc khóa.

Dù sao, có thể bạn ghi đè dữ liệu phiên của yêu cầu đầu tiên bằng dữ liệu của các yêu cầu thứ hai.

4
Harald Leithner

Chào mừng đến với thế giới của các cuộc gọi không đồng bộ. Lời khuyên của tôi là không sử dụng phiên cho các cuộc gọi AJAX/RESTful. Điều tôi sẽ làm nhất là có một số loại mã xác thực để bạn biết ai đang thực hiện cuộc gọi.

3
Andrew Eddie

Joomla cho phép bạn tạo các phụ trợ lưu trữ phiên mới, có thể giải quyết vấn đề của bạn. Chỉ cần mở rộng JSessionStorage với lớp phiên tùy chỉnh của bạn và sau đó bạn có thể đặt trình xử lý trực tiếp trong tệp configure.php của mình. (Các phụ trợ lưu trữ phiên tùy chỉnh không hiển thị trong cấu hình quản trị viên toàn cầu.)

2
Don Gilbert