Một ứng dụng PHP phục vụ Alice và Bob, và cả hai dùng ứng dụng khách cURL phía máy chủ để đến cùng một trang web từ xa qua proxy. Nếu mỗi yêu cầu tải cookies.txt, hai người dùng có thể thừa hưởng cùng một phiên đăng nhập từ xa. Việc đổi địa chỉ proxy của họ không tách tệp đó ra.

Chọn chủ sở hữu cookie trước khi chọn tên tệp. Thông thường đó là phiên từ xa logic của ứng dụng: một người dùng cục bộ, một tài khoản từ xa cụ thể và, khi cần, một không gian làm việc riêng. Điểm cuối proxy là một lựa chọn định tuyến, không phải định danh phiên đáng tin cậy. Nhiều người dùng có thể chia sẻ một điểm cuối, và một điểm cuối có thể luân chuyển lối ra.

Tải và lưu hũ của cùng một phiên

Hãy để ứng dụng ánh xạ phiên đã xác thực của nó tới một khóa tệp do máy chủ tạo. Với thư mục cookie riêng và $sessionKey đáng tin cậy, cấu hình cURL có dạng sau:

$jar = $cookieDirectory . '/' . $sessionKey . '.cookies';

$ch = curl_init('https://service.example.net/account');
curl_setopt_array($ch, [
    CURLOPT_PROXY => 'http://proxy.example.net:8080',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_COOKIEFILE => $jar,
    CURLOPT_COOKIEJAR => $jar,
]);

Đối với một thử nghiệm phiên trên trang công khai được phép trong mạng cho phép trung gian công khai, danh sách proxy HTTP cung cấp các điểm cuối ứng viên. Dùng một handle không có xác thực proxy được cấu hình hoặc thông tin đăng nhập proxy được giữ lại, và giữ trạng thái cookie gán cho phiên dự định của nó. Đoạn này cấu hình một handle; ứng dụng thực hiện việc truyền và kiểm tra kết quả qua luồng yêu cầu bình thường. COOKIEFILE tải các cookie trước đó của phiên. COOKIEJAR chọn nơi handle ghi các cookie được giữ lại. Chỉ đặt tệp đầu ra thì không tải lần đăng nhập trước.

Một phiên mới có thể bắt đầu mà không có tệp. Hãy cho lần truyền đầu tiên của nó đường dẫn hũ dự định, để trang web thiết lập cookie, và lưu trạng thái kết quả cho yêu cầu tiếp theo. Thư mục cookie phải ghi được bởi tiến trình của ứng dụng và nằm ngoài cây tài liệu được phục vụ công khai. Đừng biến tên người dùng hoặc đường dẫn do khách cung cấp thành tên tệp; hãy tra khóa đáng tin cậy trên máy chủ.

Việc lưu cần một chỗ trong vòng đời yêu cầu

libcurl thường ghi hũ trong quá trình dọn dẹp handle. Nếu ứng dụng cần một điểm lưu rõ ràng sau trao đổi từ xa, nó có thể yêu cầu:

curl_setopt($ch, CURLOPT_COOKIELIST, 'FLUSH');

Lệnh này ghi các cookie mà handle hiện biết vào hũ đã cấu hình. Kết thúc việc dùng handle cho phiên đó trước khi giao nó cho công việc không liên quan. Chỉ đổi đường dẫn hũ trên một handle đã giữ cookie của Alice không tương đương với việc tạo phiên sạch của Bob.

Cũng phân biệt tải xuống thành công với lưu trữ thành công. Tài liệu về hũ cookie lưu ý rằng lỗi ghi trong quá trình dọn dẹp không được trả về như một lỗi truyền thông thường. Kiểm tra quyền sở hữu thư mục, quyền truy cập và đầu ra chẩn đoán của ứng dụng khi một lần đăng nhập hoạt động với một yêu cầu và biến mất ở yêu cầu tiếp theo.

Các yêu cầu đồng thời mang đến một ranh giới khác. Hai tiến trình có thể tải cùng một hũ cũ, thay đổi độc lập trạng thái trong bộ nhớ của chúng, rồi lưu các kết quả khác nhau. Khóa theo phiên hoặc tuần tự hóa tương đương phải bao trùm toàn bộ chuỗi tải, trao đổi và lưu nếu cả hai yêu cầu chia sẻ một lần đăng nhập từ xa; chỉ khóa lần ghi cuối không hòa giải các ảnh chụp trước đó của chúng. Các phiên khác nhau nên có tệp khác nhau và khóa độc lập.

Khi đăng xuất, kết thúc phiên từ xa dự định và loại bỏ trạng thái cookie cục bộ của nó theo chính sách của ứng dụng. Một proxy mới chọn sau đó có thể được gắn vào bất kỳ phiên mới nào người dùng bắt đầu, mà không đặt địa chỉ proxy vào vai trò quyết định ai đang đăng nhập trong bộ nhớ.

Bài viết liên quan