2009-07-25 72 views
8

Tôi cần trợ giúp về cách tạo hệ thống hồ sơ người dùng. Tôi muốn nó giống như Facebook hoặc Myspace nơi nó chỉ có tên người dùng sau địa chỉ, không có dấu hỏi hoặc bất cứ điều gì, ví dụ: www.mysite.com/username. Tôi có tất cả các đăng ký, kịch bản đăng nhập, v.v. tất cả được thực hiện, nhưng làm cách nào để chuyển đến các cấu hình bằng cách sử dụng ví dụ URL ở trên, "/ username"?Cách tạo hồ sơ người dùng bằng PHP và MySQL

Trả lời

6

Bạn sẽ cần phải tạo ghi đè mod lấy thư mục đầu tiên và chuyển nó làm thông số $ _GET.

Hãy thử điều này:

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.*)/$ index.php?user=$1 

Điều đó sẽ viết lại bất cứ điều gì sau khi '/' như index.php user = thư mục

+0

Điều này nghe có vẻ phức tạp? – Spyderfusion02

+0

Thực ra .. khá đơn giản. Chỉ cần đặt nó vào một .htaccess trong thư mục gốc. –

+0

Tôi đang cố gắng để có được quy tắc chính xác. Hãy cho tôi một giây. –

2

Hãy nhìn vào các rewrite engine. Một số khung công tác cũng có các lớp để thực hiện công việc này như Zend Framework có Zend_Router mà bạn có thể sử dụng. Bạn có thể tự mình sử dụng cái này, các khung công tác khác cũng có chúng, kiểm tra các tài liệu cho hương vị ưa thích của bạn.

4

Đây là phiên bản rút gọn của câu trả lời của tôi, trong trường hợp bất cứ ai một khoảnh khắc TLDR:

  1. Tạo một thư mục gọi là "người sử dụng".
  2. Bên trong thư mục đó, tạo một file .htaccess với mod_rewrite sau:

    REQUEST_URIRewriteEngine on

    RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/users/index.php'REQUEST_URI

Bây giờ tất cả các yêu cầu trang cho bất kỳ phần mở rộng không nằm trong ngoặc làm cho người sử dụng thư mục sẽ chuyển đến index.php

index.php lấy URL mà người dùng đưa vào và lấy bit tại kết thúc. Có rất nhiều cách để làm điều này, đây là một đơn giản trên nếu bạn biết phần cuối cùng sẽ luôn là một tên người dùng và không, có thể, tên người dùng/bức /:

$url_request = $_SERVER['REQUEST_URI']; //Returns path requested, like "https://stackoverflow.com/users/foo/" 
$user_request = str_replace("https://stackoverflow.com/users/", "", $url_request); //this leaves only 'foo/' 
$user_name = str_replace("/", "", $user_request); //this leaves 'foo' 

Bây giờ, chỉ cần làm một truy vấn đến DB cho tên người dùng đó. Nếu nó tồn tại, index.php xuất ra hồ sơ, nếu nó không có chuyển hướng tập lệnh đến: /users/404.php

Nhưng nếu người dùng tồn tại, tất cả khách truy cập của bạn sẽ thấy là họ đặt trong

www.example.org/users/foo/ 

và họ truy cập trang người dùng của foo.

Không nhận các biến số để hacker khai thác và dễ dàng đặt trên blog hoặc URL của thẻ kinh doanh khác.


Thực ra, có thể loại bỏ dấu "?" và có một www.example.org/users/someusername đơn giản.

Tôi đã tìm hiểu về điều này là trên bài viết của Till Quack "How to Succeed with URLs" trên A List Apart.

Vì vậy, bạn sẽ cần phải hiểu Apache, .htaccess và mod_rewrite và phương pháp này yêu cầu bạn hiểu các rủi ro bảo mật và tài khoản cho chúng.Đây là ý tưởng cơ bản:

Bạn tạo thư mục có tên "người dùng" (bạn không cần phải làm điều này), và trong thư mục đó, bạn đặt tệp .htaccess chứa mod_rewite có hiệu quả nói "tất cả các yêu cầu tệp hoặc thư mục không thuộc loại nào đó (hình ảnh, pdf) phải được gửi tới tập lệnh này, sẽ xử lý vị trí gửi người dùng." Các mod_rewrite từ các bài báo như sau:

RewriteEngine on 
RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/index.php 

Trong ví dụ của tôi nó sẽ là "/your_web_root/users/index.php", lý do tại sao nó đơn giản hơn là bởi vì thay vì xử lý tất cả các yêu cầu về kịch bản này của bạn trang, nó chỉ xử lý những cái trong thư mục người dùng.

Sau đó, bạn có một tập lệnh php có nội dung "okay, URL được cung cấp là gì?" và về cơ bản lấy phần sau dấu gạch chéo cuối cùng (hoặc hai, nếu có một số khác ở cuối), và SANITIZES những gì nó tìm thấy (điều đó thực sự quan trọng) và nói "tên người dùng này tồn tại trong DB của tôi?" Nếu có, nó sẽ gửi người yêu cầu đến hồ sơ của người dùng, nhưng với một URL đẹp (chúng tôi sẽ đến đó trong một giây), nếu không, nó sẽ gửi chúng đến một trang "Không tìm thấy người dùng" hoặc bất cứ điều gì bạn muốn.

Vì vậy, nếu nó tìm thấy người dùng của bạn, tập lệnh PHP sẽ xuất ra hồ sơ người dùng (Một lần nữa, hãy đảm bảo vệ sinh nó. Bất kỳ người dùng nào bạn có thể có - nếu bạn cho họ cơ hội - nhúng mã độc vào hồ sơ của riêng họ, biết các trình duyệt xem hồ sơ sẽ thực thi mã đó). Kể từ khi trang được yêu cầu là:

www.example.org/users/example_user 

và kể từ khi bạn đang sử dụng mod_rewrite thay vì chuyển hướng, URL vẫn như cũ và kịch bản mà các tập tin .htaccess kéo lên chỉ bãi hồ sơ người dùng. Đối với khách truy cập, họ chỉ thấy rằng họ đặt vào url ở trên và hồ sơ người dùng xuất hiện.

Bạn cũng muốn tập lệnh PHP kiểm tra để người dùng thực hiện chuyển hướng đến trang "không tìm thấy người dùng", thay vì chỉ đơn giản xuất trang đó thành trang "user_not_found". Đây là để bất cứ ai đặt tại:

www.example.org/users/blabhaboehbohe 

sẽ thấy sự thay đổi URL để

www.example.org/users/notfound/ 

thay vì nhìn thấy URL giữ nguyên. Nếu một hacker thấy rằng URL không thay đổi, bây giờ họ biết rằng bạn đang sử dụng một mod_rewrite và do đó phải có một kịch bản xử lý đầu ra thực tế. Nếu họ biết điều đó, họ có thể bắt đầu phát điên tìm kiếm mọi lỗ hổng bảo mật mà bạn có thể đã mở.

cổ vũ.

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