[英]Redirect to referer url in codeigniter
在我的項目的消息傳遞系統中,當您收到來自用戶的消息時,您會收到一封電子郵件警報,說明另一個用戶已發送消息以查看消息,請單擊此處(即消息的 url)因此,如果用戶未登錄系統他被重定向到登錄頁面,登錄后它應該返回到引用網址。 我在核心文件夾中創建了一個 basecontoller 並擴展了 CI_controller 身份驗證代碼如下。
function authenticate($type = 'user')
{
if($type == 'user')
{
if($this->user_id)
{
// user is logged in. check for permissions now
}
else
{
// user isnt logged in. store the referrer URL in a var.
if(isset($_SERVER['HTTP_REFERER']))
{
$redirect_to = str_replace(base_url(),'',$_SERVER['HTTP_REFERER']);
}
else
{
$redirect_to = $this->uri->uri_string();
}
redirect('user/login?redirect='.$redirect_to);
exit;
}
}
if($type == 'admin')
{
if($this->session->userdata('admin_id') && $this->session->userdata('user_type') ==5)
{
// Admin is logged in
}
else
{
redirect('admin/login');
exit;
}
}
}
引薦網址是“http://example.com/project/pm/view_conversation?id=11”,現在的問題是我正在獲取引薦網址,直到 view_conversation 並且無法獲得 id 部分。
有什么建議嗎?
謝謝你。
這可以幫助:
CI 2+ https://www.codeigniter.com/userguide2/libraries/user_agent.html
CI 3+http://www.codeigniter.com/userguide3/libraries/user_agent.html
以下解決方案適用於 Codeigniter 版本 3
$this->load->library('user_agent');
if ($this->agent->is_referral())
{
echo $this->agent->referrer();
}
更新:關於如何使用相同的 user_agent 庫獲取引用信息的有趣且有用的信息
https://www.tutorialandexample.com/user-agent-class/
將該代碼放在您的登錄控制器中
function index() {
$this->load->library('user_agent'); // load user agent library
//Set session for the referrer url
$this->session->set_userdata('referrer_url', $this->agent->referrer() );
}
登錄后重定向代碼
// user is authenticated if referrer is there
if( $this->session->userdata('referrer_url') ) {
//Store in a variable so that can unset the session
$redirect_back = $this->session->userdata('referrer_url');
$this->session->unset_userdata('referrer_url');
redirect( $redirect_back );
}
因為你在 url 中有雙問號,所以瀏覽器會忽略第二個之后的 url 部分。 使用urlencode重定向部分,如下所示:
redirect('user/login?redirect='.urlencode($redirect_to));
我已經測試過了,它是這樣工作的。
默認情況下,CI 配置為忽略 URL 的查詢部分('?' 之后的部分)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.