2015-08-18 19 views
5

Tôi có một trang có tên là Login.php. Tôi cần URL của trang trước trang cuối cùng.Cách lấy hai URL của trang trước đó trong php

Khi biểu mẫu đăng nhập người dùng sẽ gửi tới check_login.php kiểm tra tên người dùng và mật khẩu của họ. Sau đó, tôi sẽ chuyển hướng người dùng đến index.php.

Vấn đề là tôi muốn người dùng được chuyển hướng đến trang thứ hai đến trang cuối cùng họ truy cập.

VÍ DỤ:

URL đầu tiên:www.example.com/posts/1

URL thứ hai:www.example.com/login.php

URL thứ ba:wwww.example.com/check_login.php

Vì vậy, nếu tên người dùng và mật khẩu là chính xác =>header('location: www.example.com/posts/1');

Có một giải pháp để có được URL trước:

// login.php 
$_SESSION['url'] = $_SERVER['HTTP_REFERER']; 

// check_login.php 
header('location: '.$_SESSION['url']); 

Nhưng tôi cần phải nhận được thứ hai để URL cuối cùng, không phải là URL ngoái. Làm thế nào tôi có thể làm điều này trong PHP?

+1

Theo như tôi biết, không có – Soundz

+0

không. referer chỉ có (đôi khi/có thể) trang trước IMMEDIATELY. nếu bạn muốn theo dõi nhiều trang trước, bạn sẽ phải ghi lại bằng cách nào đó. –

+1

Sidenote: Bạn không nên dựa vào $ _SERVER ['HTTP_REFERER'] –

Trả lời

4

Đỗ những gì người khác đã làm:

giải pháp đầu tiên:

Tạo một lĩnh vực hidden trong các trang của bạn để khi người dùng nhấp vào login nó sẽ đưa ông tới trang login.php với trước liên kết. Sau đó, bạn có thể làm bất cứ điều gì bạn muốn (như, lưu nó vào $_SESSION['url']) với liên kết này.

Second Giải pháp:

Hãy tưởng tượng bạn có một neo như thế này: <a href="login.php">login</a>. Thay vì chỉ sử dụng login.php, bạn có thể sử dụng login.php?redirect_to=http://example.com/post/1 để bạn có thể truy cập url từ trang login.php của mình với yêu cầu $_GET['redirect_to'].

LƯU Ý: Luôn nhớ vệ sinh dữ liệu đầu vào của người dùng.

+0

cảm ơn, +1 phiếu bầu cho bạn – Shafizadeh

1

Nhưng tôi muốn biết có cách nào để tôi có thể nhận được hai url trước đó trực tiếp?

Có, bạn cần phiên. ví dụ

if(!isset($_SESSION['url'])) 
    $lurl = array(); 
else 
    $lurl = $_SESSION['url']); 
$count = count($lurl); 
$lurl[$count % 2] = $_SERVER['HTTP_REFERER']; 
$_SESSION['url'] = $lurl; 

Nên biết trước: (php manual) Địa chỉ của trang (nếu có) mà gọi user agent để trang hiện tại. Điều này được thiết lập bởi tác nhân người dùng. Không phải tất cả tác nhân người dùng đều sẽ đặt cài đặt này và một số cung cấp khả năng sửa đổi HTTP_REFERER thành một tính năng. Nói tóm lại, nó thực sự không thể tin được.

+0

câu trả lời của bạn giống như những gì tôi đã nói, dù sao cảm ơn, +1 bình chọn cho bạn. – Shafizadeh

1

Tôi cho rằng câu trả lời của @ GinoDeMaria hoạt động, nhưng nó đang thực hiện một số kiểm tra không cần thiết và vẫn thực hiện nhiều cuộc gọi để gán biến.

PHIÊN SỬ DỤNG

Vì vậy, một cách đơn giản hơn để làm điều đó sẽ là:

$_SESSION['2last_url'] = isset($_SESSION['last_url']) ? $_SESSION['last_url'] : null; 
$_SESSION['last_url'] = $_SERVER['HTTP_REFERER']; 

Vì vậy $_SESSION['2last_url'] chứa giá trị mà bạn đang tìm kiếm.

Bây giờ, Gino cho biết tác nhân người dùng không phải lúc nào cũng đặt $_SERVER['HTTP_REFERER'] đúng cách.

sử dụng chuyển hướng giá trị trong YÊU CẦU

Phương pháp này là một chút thanh lịch hơn, và có thể chứng minh được nhiều hơn nữa hữu ích. Chỉ cần nói cho check_login.php nơi chuyển hướng người dùng sau khi đăng nhập.

Trước tiên, chúng tôi thông báo cho trang đăng nhập nơi chuyển hướng. Vì vậy, thay vì đi đến login.php, chúng tôi truy cập login.php?redirect=http%3A%2F%2Fexample.com%2Fpost%2F1. (Bạn có thể nhận thấy URL chuyển hướng có vẻ lạ, điều này là do mã hóa URL. Hoặc là use a tool like this hoặc check out PHP's urlencode() function).

Bây giờ trong bạn login.php bạn phải thêm một lĩnh vực ẩn chứa giá trị này:

<input type="hidden" name="redirect" value="<?php echo $_GET['redirect']; ?>"> 

Sau đó, trong check_login.php chỉ nhận được giá trị đó:

header("Location: " . $_POST['redirect']); 

Và có bạn đi.

+0

thú vị, +1 bình chọn cho bạn .. – Shafizadeh

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