Trước đây tôi đã tạo thêm cookie "rememberme" với băm duy nhất, được lưu trữ trong cơ sở dữ liệu, ánh xạ tới id người dùng.Cách tốt nhất để làm "nhớ tôi" dưới dạng php khi sử dụng phiên gốc là gì?
Nếu người dùng có cookie - trang web cố gắng tìm giá trị của nó trong cơ sở dữ liệu và nếu phiên được tìm thấy đã được thiết lập.
Sau đó, phát triển dự án mới, tôi nghĩ rằng có thể không an toàn để tạo mã băm duy nhất này và giữ hai cookie (bản gốc "PHPSESSID" + "memme") của tôi cho một thao tác (nhận dạng người dùng) quá mức .
Có thể có cách để thiết lập không phải là phiên toàn cầu, nhưng để thiết lập riêng cho phiên người dùng khác nhau ... hoặc có thể tốt hơn để giữ phiên người dùng trong cơ sở dữ liệu, ánh xạ tới userid?
UPDATE 1 Tôi nghĩ nếu nó là như vậy khó có thể làm cho "nhớ đến tôi" nút, chúng ta có thể đi theo con đường khác - để làm cho "Không nút máy tính của tôi". Ý tưởng là đặt cookie_lifetime mặc định cho một tuần trong php.ini (ví dụ) và nếu người dùng chọn hộp kiểm này - chúng tôi sẽ đặt cookie_lifetime thành 0 bằng hàm session_set_cookie_params.
Vì vậy, 1 câu hỏi là - sẽ session_set_cookie_params ảnh hưởng đến người sử dụng cookie khác (trong tài liệu hướng dẫn người ta nói, rằng session_set_cookie_params tùy chọn này sẽ có hiệu lực cho đến khi quá trình php sẽ được thực hiện)
câu hỏi 2d là nếu session_set_cookie_params không ảnh hưởng đến toàn cầu cài đặt, việc tạo phiên có ảnh hưởng đến người dùng không muốn giữ cookie lâu dài không?
UPDATE 2: [Câu hỏi 1 câu trả lời]
Chỉ cần kiểm tra session_set_cookie_params chức năng. Tôi đã viết một kịch bản, mà bộ cookie phiên đời vào không sử dụng session_set_cookie_params và sau đó thực hiện trong 30 giây:
if ($_GET['test']) {
session_set_cookie_params (0);
while (true) {
sleep(1);
}
}
session_start();
Vì vậy, trong trình duyệt đầu tiên tôi chỉ mới bắt đầu kịch bản này với test = 1 tham số, ngay sau đó (? trong khi kịch bản này đã được thực hiện) tôi đã bắt đầu tập lệnh này mà không có tham số trong trình duyệt thứ hai. Câu trả lời là không có cookie thứ hai của trình duyệt không bị ảnh hưởng. Nó có tuổi thọ, mà đã được quy định tại php.ini
UPDATE 3: [Câu hỏi 2 câu trả lời] Sau đó, tôi đã cố gắng để kiểm tra nếu tái sinh ảnh hưởng đến phiên Cookie đời, mà đã được thiết lập bởi session_set_cookie_params.
Có, nó ảnh hưởng. Nếu tôi đặt cookie phiên có thời gian tùy chỉnh, được đặt bởi session_set_cookie_params và sau đó gọi session_regenerate_id(), cookie sẽ có toàn thời gian, được đặt trong php.ini
Nhưng, nếu chúng ta đặt session_set_cookie_params (0) trước khi gọi session_regenerate_id() , cookie của chúng tôi sẽ có tuổi thọ chính xác.
Vì vậy, đó là nó! Điều đó thật dễ dàng! 8)
Cảm ơn bạn, quý bà và quý ông!
tôi don Không hiểu. Thời lượng phiên không ảnh hưởng đến thực tế là người dùng sẽ nhận được PHPSESSID mới khi trình duyệt được khôi phục. Vui lòng giải thích mối lo ngại về bảo mật của bạn. – Teson
Tôi muốn giữ một cookie để nhận dạng người dùng. Tôi không chắc chắn rằng cookie tùy chỉnh "Rememberme" của tôi là an toàn, hơn nữa, tôi không muốn nghĩ về nó - hai cookie cho một thao tác quá dư thừa. – avasin
Cách đơn giản nhất là sử dụng một hoặc hai cookie có giá trị 'SHA1 ($ userid. $ Salt)' và 'username' công khai. – Stan