2009-12-25 34 views
10

Khi người dùng đăng nhập, tôi nhận được ID của anh ta/cô ấy và lưu nó trong một phiên var. Điều tôi tự hỏi là, đây có phải là con đường để đi không? Hoặc tôi có nên sử dụng cookie không? do đó, nó tự động đăng nhập và như vậy.Hệ thống đăng nhập cookie/phiên

session_start(); 


ifcorrectlogin { 
$_SESSION['id'] = mysql_result($loginQuery, 0, 'user_id'); 
} 

làm cách nào để bạn xác thực người dùng của mình?

// Newbie

+0

Chào mừng bạn đến StackOverflow. Câu hỏi đầu tiên tuyệt vời! – Sampson

+1

cảm ơn! P – Erkka

Trả lời

1

Cookie có thể được thao tác rất dễ dàng. Quản lý đăng nhập/đăng xuất với Phiên. Nếu bạn muốn, bạn có thể lưu người dùng emailaddress/username trong một cookie, và điền vào hộp tên người dùng cho họ lần sau khi họ truy cập sau khi phiên hiện tại đã hết hạn.

+0

Câu đầu tiên có một chút nghịch lý. PHP duy trì phiên với sự trợ giúp của một cookie. Chỉ cần đảm bảo rằng giá trị cookie đủ mạnh. – BalusC

+0

Balus, tôi nghĩ rằng tôi thấy câu trả lời của tôi có thể hơi khó hiểu. Sau khi đọc của bạn, có vẻ như với tôi rằng chúng tôi đã cung cấp cùng một giải pháp. – Sampson

1

Tôi sẽ cố gắng tìm một công cụ phiên để bạn không phải đối phó với misc. vấn đề an ninh mà cắn bạn trong ass nếu bạn làm điều nhỏ nhất sai. Tôi sử dụng django trong đó có một công cụ phiên được xây dựng in Tôi không nhận thức được các dịch vụ khác trong lĩnh vực này mặc dù tôi sẽ giả định hầu hết các khuôn khổ sẽ có một.

Cách chúng thực hiện trong django bằng cách đặt băm mật mã vào cookie của người dùng được cập nhật mỗi lần xem trang và lưu tất cả thông tin phiên khác trong cơ sở dữ liệu trên máy chủ của bạn để ngăn người dùng can thiệp và bảo mật.

5

Vâng, đây là con đường để đi. Bản thân phiên đã được hỗ trợ bởi một cookie để loại bỏ bạn bất kỳ nỗ lực lập trình nào xung quanh đó. Phiên (thực ra, cookie) sẽ hoạt động miễn là người dùng có thể mở trình duyệt hoặc cho đến khi phiên hết giờ ở phía máy chủ vì người dùng không truy cập trang web trong một khoảng thời gian nhất định (thường là khoảng 30 phút).

Khi đăng nhập, chỉ cần đặt số User thu được trong số $_SESSION. Trên mọi yêu cầu trên các trang bị hạn chế, bạn chỉ cần kiểm tra xem đăng nhập User có sẵn trong $_SESSION và xử lý yêu cầu tương ứng hay không, tức là tiếp tục với yêu cầu hoặc chuyển hướng đến trang đăng nhập hoặc lỗi. Khi đăng xuất, chỉ cần xóa User khỏi số $_SESSION.

Nếu bạn muốn thêm Nhớ tôi trên máy tính này tùy chọn, sau đó bạn sẽ cần phải thêm một cookie khác mà bạn sống lâu hơn phiên. Bạn chỉ cần đảm bảo rằng bạn tạo ra một giá trị lâu dài, độc đáo và khó đoán cho cookie, nếu không quá dễ dàng để hack. Hãy xem PHP đã làm thế nào bằng cách kiểm tra cookie với tên phpsessionid trong trình duyệt web của bạn.

+0

vì vậy nếu tôi hiểu chính xác nếu người dùng muốn "nhớ" tôi nên lưu trữ một chuỗi duy nhất trong cookie và trong db và khi người dùng truy cập lại, tôi kiểm tra xem cookie có tồn tại không và nếu nó tồn tại tôi so sánh nó với một trong db? – Erkka

+1

Hầu như tốt. Khi một người dùng ** không đăng nhập **, sau đó kiểm tra DB để liên kết 'Người dùng' và sau đó" tự động "đăng nhập nó. Tôi đã từng đăng câu trả lời bao gồm chính xác điều đó, bạn có thể thấy nó hữu ích : http://stackoverflow.com/questions/1877242/keep-user-logged-in-when-he-visit-the-same-page-again/1877304#1877304 – BalusC

0

BalusC đề cập, các session_ -các chức năng trong php là cách để đi, ý tưởng cơ bản của bạn là âm thanh. Nhưng vẫn còn nhiều hiện thực khác nhau, một số trong số họ có những cạm bẫy của họ. Ví dụ: như Jonathan Samson giải thích, việc sử dụng cookie có thể dẫn đến lỗ hổng bảo mật.

PHP của tôi hơi bị gỉ, nhưng tôi nhớ rằng các chức năng session_ cũng có thể sử dụng ID phiên được mã hóa trong URL. (Cũng có một tùy chọn để tự động thêm vào tất cả các liên kết cục bộ (như GET) và mục tiêu biểu mẫu (như POST). Nhưng cũng không phải không có rủi ro.) Một cách để ngăn chặn việc chiếm đoạt phiên bằng cách sao chép SID để nhớ địa chỉ IP và so sánh nó với bất kỳ yêu cầu nào đi kèm với ID phiên hợp lệ đến IP đã gửi yêu cầu này.

Như bạn có thể thấy, phương pháp cơ bản chỉ là khởi đầu, có nhiều điều cần xem xét hơn.Do đó, đề xuất của SapphireSun là một điều cần được cân nhắc: Bằng cách sử dụng thư viện được kiểm tra tốt, bạn có thể đạt được mức độ bảo mật cao mà không cần sử dụng thời gian phát triển có giá trị để phát triển hệ thống phiên của riêng bạn. Tôi muốn giới thiệu phương pháp này cho bất kỳ hệ thống nào mà bạn muốn triển khai trong thế giới thực.

OTOH, nếu bạn muốn tìm hiểu về các phiên PHP và các vấn đề bảo mật, bạn nên chắc chắn điều đó cho mình làm, nếu chỉ để hiểu làm thế nào không để làm điều đó ;-)

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