假設我想導航到聯繫頁面。但爲了到達那裏,該網站要求我登錄。登錄後,我應該被重定向到聯繫頁面,但我在別的地方。我該怎麼做才能讓我在登錄後重定向到我想要的頁面?使用PHP登錄後重定向到上一頁
我有一種強烈的感覺,認爲這與會話有關,但仍然如此。該方法應該是什麼?
假設我想導航到聯繫頁面。但爲了到達那裏,該網站要求我登錄。登錄後,我應該被重定向到聯繫頁面,但我在別的地方。我該怎麼做才能讓我在登錄後重定向到我想要的頁面?使用PHP登錄後重定向到上一頁
我有一種強烈的感覺,認爲這與會話有關,但仍然如此。該方法應該是什麼?
你有三種常用的方法:
(1)看起來像:
<?php
session_start();
if (!$_SESSION['userid']) {
$_SESSION['page'] = '/contact';
header('Location: /login');
exit;
}
...
?>
成功登錄檢索$_SESSION['page']
和重定向。
(2)除了沒有會話變量之外是相似的。相反,您有:
header('Location: /login?return=/contact');
要通過重定向。登錄頁面必須將其作爲隱藏的表單域包含在頁面中,以向用戶提供用戶名和密碼的請求。
(3)類似但不重定向到單獨的頁面。相反,每個頁面都可能成爲登錄頁面。如果用戶未登錄,則會顯示登錄表單。該網址仍然是「/ contact」。每個頁面都會檢測並處理登錄嘗試。
這種方法的優點是少了一次外部重定向,並且處理提交的表單更容易。通過這個我的意思是想象有人在你的一個頁面上填寫表格,然後點擊提交。系統看到他們的登錄已過期。如果您將用戶重定向到新頁面然後重定向回來,他們可能需要重新輸入所有表單字段。如果隱式處理登錄,則可以將所有表單字段包含爲隱藏輸入,並且一旦登錄就可以將其無縫地視爲原始頁面的提交。
3.將prev頁面存儲爲GET變量:) – n00b 2010-02-21 23:56:57
的方法,我通常使用:
$_SERVER['HTTP_REFERER']
變量(這將是設置爲用戶來自的頁面,即聯繫頁面)並將其作爲隱藏字段存儲。它的美妙之處在於,它自動適用於所有需要登錄的頁面,而無需在每個頁面上設置會話變量。
需要注意的一點是,登錄時應檢查引薦者中的頁面是否位於您的網站上,而不是完全不同的網站,以防用戶碰巧來自Google。
我傾向於重定向到登錄頁面,在查詢字符串中傳遞當前URL。
頁面保護
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';
登錄頁面
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);
在上面的代碼我只是模擬登錄的過程。通常情況下,用戶應通過提交其憑據一個表單,證書被驗證,然後用戶登錄。重定向回頁面的URL必須通過這個過程來維護。您可以繼續傳遞查詢字符串中的URL或通過表單中的隱藏輸入字段。
謝謝,它幫助我解決了類似的需求..... – Pushpendra 2011-02-24 06:56:07
好問題,歡迎來到:) :) – 2010-02-22 00:41:59
好的問題,我認爲很多程序員需要知道它的答案。謝謝。 – TopDeveloper 2012-01-30 06:48:15