2011-12-08 29 views
5

Tôi đang xây dựng một ứng dụng cơ bản và tôi đang cố gắng tìm ra cách tôi có thể chuyển thông tin người dùng từ login.php đến index.php. Đây là những gì tôi đã có cho đến nay: Tôi có một trang đăng nhập gửi và xác thực người dùng thông qua cơ sở dữ liệu thông qua một lớp người dùng. Sau đó, các thuộc tính của người dùng được đặt thành các giá trị được trả về từ cơ sở dữ liệu. Từ đó id được lưu trữ trong một phiên. Làm cách nào để tôi truy cập thông tin người dùng từ trang này đến trang khác. Tôi có nên xây dựng một phương thức xây dựng để truy vấn cơ sở dữ liệu với id phiên không? Đó có phải là cách tiếp cận an toàn hoặc hợp lệ không? Một ví dụ sẽ là tràn ngăn xếp. Cách bạn có thể thấy tên người dùng của mình ở đầu mỗi trang.Tôi làm cách nào để có thể truy cập thông tin người dùng sau khi đăng nhập?

+0

Tại sao không lưu trữ thông tin người dùng vào phiên? –

Trả lời

6

Âm thanh như bạn có ý tưởng chung của phiên xử lý xuống. Vì vậy, bạn chỉ cần hỏi phương pháp nào là an toàn, hoặc được tối ưu hóa hoặc bất cứ điều gì.

Thông thường, bạn nên lưu trữ ít thông tin trong phiên hoặc cookie càng tốt để bạn không mở người dùng của mình tới các cuộc tấn công đánh cá đơn giản. Vì vậy, lý tưởng có nghĩa là bạn có một bảng phiên trong cơ sở dữ liệu mà bạn có thể tham chiếu chéo với id phiên.

Có, bạn sẽ chạy truy vấn trên mỗi lần tải trang, nhưng điều đó không thực sự có nhiều chi phí trên một trang web chuẩn. Và nó không phải là không an toàn miễn là bạn đúng cách khử trùng đầu vào của bạn. Bằng cách đó bạn sẽ không bị gỡ xuống nếu người dùng thao túng thông tin phiên của họ.

Ngoài ra, nếu bạn chỉ sử dụng id người dùng và tên người dùng, bạn có thể lưu trữ an toàn những người đó trong phiên và tránh truy vấn trên mỗi lần tải trang.Chỉ cần không đi hạt lấp đầy phiên hoặc cookie dữ liệu lên với mảng cực kỳ dài đầy thông tin được sử dụng không phổ biến.

+0

+1; Điểm tốt về sự an toàn của dữ liệu phiên –

+0

@Kai trả lời câu hỏi của tôi cho T, cảm ơn. – Scott

4

Trong trang đăng nhập của bạn, lưu trữ thông tin người dùng từ cơ sở dữ liệu trong một phiên, trên các trang khác, bạn có thể trực tiếp gọi cho họ

<?php 
session_start(); 
$_SESSION['user'] = $username; 

và trên các trang web khác

<?php 
session_start(); 
$_SESSION['user']; 
+0

quay trở lại ví dụ stackoverflow, khi bạn đi đến trang hồ sơ của bạn, có rất nhiều dữ liệu ở đó: câu hỏi bạn đã trả lời, câu hỏi bạn đã hỏi vv .. Rõ ràng là bạn sẽ không lưu trữ tất cả điều đó trong một phiên , vậy làm thế nào bạn sẽ lấy tất cả dữ liệu đó từ cơ sở dữ liệu với $ _SESSSION ['USER'] và id? – Scott

+0

Tôi cho rằng bạn có id chính cho người dùng trong cấu trúc sql, chỉ lưu trữ id trong $ _SESSION ['id'] và một số thông tin cơ bản sẽ được sử dụng trên mỗi trang web (như tên người dùng và tên), nếu sau này bạn muốn tìm một số truy vấn khó và cụ thể, chỉ cần lấy id từ $ _SESSION ['id'] và sử dụng nó trong truy vấn sql của bạn –

1

tôi đang xây dựng một ứng dụng cơ bản và tôi đang cố gắng tìm hiểu cách tôi có thể chuyển thông tin người dùng từ login.php đến index.php

Một cách là để lưu trữ các dữ liệu chia sẻ dữ liệu như phiên PHP: http://www.tizag.com/phpT/phpsessions.php

<?php 
session_start(); // start the session 

$_SESSION['views'] = 1; // store session data 
echo "Pageviews = ". $_SESSION['views']; //retrieve data 

Lưu trữ dữ liệu người dùng mà bạn cần cho tất cả các trang. Bạn có thể để lại dữ liệu mở rộng trong DB, do đó bạn không phải truy vấn một tấn dữ liệu lên phía trước (như số liệu thống kê đầy đủ mà bạn thấy trên trang tiểu sử trên SO).

Sau đó, bạn sẽ không phải truy vấn lại dữ liệu người dùng trên mỗi trang. Chỉ cần lấy nó từ dữ liệu phiên.

Tôi có nên xây dựng phương thức xây dựng để truy vấn cơ sở dữ liệu bằng id phiên không? Đó có phải là cách tiếp cận an toàn hoặc hợp lệ không?

Nếu bạn đang sử dụng cùng một tài khoản DB cho mọi thứ, không có điều gì kém an toàn hơn khi truy vấn bảng người dùng. Bạn sẽ không tiếp xúc với bất kỳ rủi ro nào nhiều hơn bất kỳ truy vấn nào khác mà bạn đã thực hiện.

Nếu bạn lo lắng về sự an toàn khi truy cập DB, tôi khuyên bạn nên tìm hiểu về một vấn đề cụ thể: ngăn chặn SQL injection attacks.

Xem: How can I prevent SQL injection in PHP?

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