2010-11-06 40 views
6

Tôi đang tạo chức năng đăng nhập trên trang web của mình và tôi đang nghĩ về việc tạo lại ID phiên trên mỗi trang để làm cho mọi thứ an toàn hơn.PHP "Session_regenerate_id" và Xác thực người dùng

Tôi đã đọc thông tin về PHP về regenerate_id nhưng các bài đăng trên trang PHP hoàn toàn khác với thông tin mà chúng cung cấp về session_regenerate_id.

ai đó có thể giải thích hai câu hỏi sau:

  • Tôi có cần phải sao chép dữ liệu phiên cũ thành mới được tạo ra một, hoặc là này thực hiện tự động? Ví dụ về mã được đánh giá rất nhiều ...

  • Làm cách nào để kiểm tra xem liệu người dùng đã đăng nhập chưa? Tôi nên lưu trữ gì trong biến phiên và làm cách nào? Mã ví dụ được rất nhiều đánh giá cao ...

Cảm ơn

Trả lời

7

Calling session_regenerate_id() trên mỗi trang có thể là một chút quá mức cần thiết, tùy thuộc vào thiết lập của bạn. Chức năng này được sử dụng để ngăn chặn việc chiếm đoạt phiên và nên được sử dụng bất cứ khi nào người dùng nâng cao mức độ đặc quyền của họ (chẳng hạn như đăng nhập). Thông thường, bạn sẽ chuyển sang kết nối https khi người dùng đăng nhập, nghĩa là bạn chỉ cần gọi session_regenerate_id() một lần vì cookie mới sẽ được chuyển qua kết nối an toàn và sẽ không thể bị nghe trộm. Tuy nhiên, nếu bạn không có chứng chỉ SSL trên máy chủ, hãy khôi phục cookie phiên trên mỗi trang có thể là một tùy chọn tốt.

Khi bạn gọi session_regenerate_id(), bạn không cần sao chép dữ liệu phiên. Tất cả điều này được PHP quản lý. Về cơ bản, mã thông báo phiên và cookie mới được tạo, dữ liệu phiên được sao chép trong kho phiên được liên kết với mã thông báo mới và nếu bạn chuyển đúng như đối số duy nhất cho hàm, tệp dữ liệu phiên cũ trên đĩa sẽ bị xóa.

Nội dung bạn lưu trữ trong phiên để cho biết liệu người dùng đã đăng nhập có tùy thuộc vào bạn hay không. Tôi thường chỉ lưu trữ một giá trị boolean đơn giản để chỉ ra nếu họ đang đăng nhập, cùng với các giá trị khác giữ tên người dùng, tên, vv Sau đó kiểm tra nếu ai đó đăng nhập cũng đơn giản như thế này:

<?php 
    if ($_SESSION['logged_in']){ 
     //User logged in 
    } else { 
     //User not logged in 
    } 
?> 

HTH.

Các vấn đề liên quan