2010-02-21 80 views
9

Giả sử tôi muốn điều hướng đến trang liên hệ. Nhưng để đến đó, trang web yêu cầu tôi đăng nhập. Sau khi đăng nhập, tôi được chuyển hướng đến trang liên hệ, nhưng tôi ở một nơi khác. Tôi nên làm gì để tôi được chuyển hướng đến trang tôi muốn sau khi đăng nhập?Chuyển hướng đến trang trước sau khi đăng nhập bằng cách sử dụng PHP

Tôi có cảm giác mạnh mẽ rằng việc này có liên quan đến các phiên nhưng dù sao. Cách tiếp cận này nên là gì?

+0

câu hỏi hay và chào mừng bạn đến với SO :) –

+0

Câu hỏi hay là tôi nghĩ nhiều lập trình viên sẽ cần phải biết câu trả lời của nó. Cảm ơn. – TopDeveloper

Trả lời

10

Bạn có ba cách tiếp cận chung:

  1. Store trang trước đó trong phiên giao dịch;
  2. Lưu trữ trang dưới dạng biến GET; hoặc
  3. Thực hiện chuyển hướng nội bộ đến trang đăng nhập.

(1) trông giống như sau:

<?php 
session_start(); 
if (!$_SESSION['userid']) { 
    $_SESSION['page'] = '/contact'; 
    header('Location: /login'); 
    exit; 
} 
... 
?> 

On đăng nhập thành công lấy $_SESSION['page'] và chuyển hướng.

(2) tương tự ngoại trừ không có biến phiên. Thay vào đó, bạn có:

header('Location: /login?return=/contact'); 

để chuyển hướng. Trang đăng nhập sẽ phải bao gồm nó dưới dạng một trường biểu mẫu ẩn trên trang trình bày người dùng với yêu cầu tên người dùng và mật khẩu.

(3) tương tự nhưng không chuyển hướng đến một trang riêng biệt. Thay vào đó, mỗi trang có thể là trang đăng nhập. Nếu người dùng không đăng nhập vào biểu mẫu đăng nhập được trình bày thay thế. URL sẽ vẫn là "/ liên hệ". Mỗi trang sẽ phát hiện và xử lý các lần đăng nhập.

Ưu điểm của phương pháp này là một chuyển hướng bên ngoài ít hơn và dễ dàng hơn trong việc xử lý biểu mẫu đã gửi. Bởi điều này tôi có nghĩa là tưởng tượng một người nào đó điền vào một mẫu trên một trong các trang của bạn và sau đó nhấp chuột gửi. Hệ thống nhìn thấy thông tin đăng nhập của họ đã hết hạn. Nếu bạn chuyển hướng người dùng đến trang mới và sau đó chuyển hướng lại, họ có thể sẽ cần phải nhập lại tất cả các trường biểu mẫu. Nếu bạn xử lý việc đăng nhập ngầm, bạn có thể bao gồm tất cả các trường biểu mẫu dưới dạng các mục nhập bị ẩn và sau khi đã đăng nhập một cách liền mạch coi đó là một lần gửi trang gốc.

+2

3. lưu trữ trang trước như biến GET :) – n00b

4

Cách tiếp cận tôi thường sử dụng:.

  1. Trên trang liên lạc của bạn, chuyển hướng đến trang đăng nhập nếu người dùng không đăng nhập
  2. Trên trang đăng nhập, sử dụng $_SERVER['HTTP_REFERER'] biến (mà sẽ được đặt thành trang mà người dùng đến từ, tức là trang liên hệ) và lưu trữ đó dưới dạng trường ẩn.
  3. Sau khi người dùng đăng nhập, hãy chuyển hướng họ trở lại trang họ đang truy cập.

Vẻ đẹp về điều này là nó tự động hoạt động cho tất cả các trang yêu cầu đăng nhập mà không phải đặt biến phiên trên mỗi trang.

Một lưu ý: khi đăng nhập, bạn nên kiểm tra xem trang trong người giới thiệu có nằm trên trang web của bạn hay không, không phải là một trang web hoàn toàn khác, trong trường hợp người dùng tình cờ đến từ Google.

2

Tôi có xu hướng chuyển hướng đến trang đăng nhập, chuyển URL hiện tại trong chuỗi truy vấn.

Trang để bảo vệ

session_start(); 

if (!isset($_SESSION['user_id'])) 
{ 
    // Fetch current URL 
    $this_url = $_SERVER['REQUEST_URI']; 

    // Redirect to login page passing current URL 
    header('Location: login.php?return_url=' . urlencode($this_url)); 
    exit; 
} 

// Continue processing 
echo 'Hello from this page'; 

Tên đăng nhập trang

session_start(); 

// Simulate logging in user 
$_SESSION['user_id'] = 1; 

// Fetch URL to redirect to 
$return_url = isset($_GET['return_url']) ? $_GET['return_url'] : 'site_home.php'; 

// Redirect back 
header('Location: ' . $return_url); 

Trong đoạn mã trên tôi chỉ mô phỏng các quá trình đăng nhập. Thông thường người dùng phải nộp thông tin của họ qua một biểu mẫu, thông tin đăng nhập được xác minh và sau đó người dùng đăng nhập. URL của trang để chuyển hướng trở lại phải được duy trì thông qua quá trình này. Bạn có thể tiếp tục chuyển URL trong chuỗi truy vấn hoặc thông qua trường nhập ẩn trong biểu mẫu.

+0

Cảm ơn, Nó đã giúp tôi trong một nhu cầu tương tự ..... – Pushpendra

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