2010-01-25 50 views
5

Tôi đang xây dựng trang web CodeIgniter cơ bản yêu cầu đăng nhập trước khi bạn có thể truy cập bất kỳ trang web nào.CodeIgniter: Chuyển hướng đăng nhập động?

Nếu người dùng truy cập một số trang web url, một cái gì đó như thế này:

http://www.mysite.com/project/detail/2049 

VÀ họ hiện đăng xuất, tôi có nó thiết lập để tự động kick chúng trở lại trang đăng nhập.

Câu hỏi của tôi là sau khi họ đăng nhập, cách tốt nhất để chuyển hướng họ đến URL ban đầu họ đã nhập là gì, thay vì nói, chuyển hướng họ đến trang chủ của trang web?

Tôi đã suy nghĩ có thể, tự động tạo URL dưới dạng phần tử biểu mẫu ẩn trong biểu mẫu đăng nhập và chuyển hướng đến khi đăng nhập thành công ... Bạn nghĩ sao? Có cách nào tốt hơn/tốt nhất cho loại chuyển hướng sau đăng nhập động này không?

Trả lời

16

Khi họ đạt kỷ lục trang hạn chế các uri và đặt nó dưới dạng dữ liệu phiên với

this->session->set_userdata('redirect', 'page/uri/here');

sau đó chuyển hướng chúng để đăng nhập/đăng ký

sau khi họ đăng nhập kiểm tra xem nếu 'chuyển hướng 'hiện diện với

if($this->session->userdata('redirect')) 
{ 
    redirect($this->session->userdata('redirect')); 
} 

nếu nó không mang chúng đến bất cứ nơi nào bạn thường mang chúng sau khi đăng nhập

+0

rực rỡ, cảm ơn! –

0

khi cố truy cập bị chặn:

redirect('/public/login/r'.$this->uri->uri_string()); 

như vậy trong trường hợp của bạn, sau khi chuyển hướng url có thể trông như thế này:

http://www.example.com/public/login/r/project/detail/2049 

nếu đăng nhập thành công

$uri = $this->uri->uri_string(); 
$redirect = substr($uri, strpos($uri, '/r/')+2); 
redirect($redirect); 

sẽ chuyển hướng đến tài nguyên ban đầu.

(và không, 2 không nên +3)

0

Tại sao không bạn tạo ra một giá trị phiên khi đăng nhập và sau đó xác minh nó trên mỗi trang cần thiết để an toàn?

xây dựng nó thành một thư viện, vì vậy bạn có thể gọi như sau:

$this->mylibrary->login($user); 

$this->mylibrary->is_logged_in($user); trên đầu mỗi trang và tự động chuyển hướng truy cập vào trang web chính của bạn.

+0

Tôi nghĩ bạn hiểu sai câu hỏi. –

0

Tôi đang sử dụng flashdata để chuyển hướng.

this->session->set_flashdata('redirect_url', 'page/uri/here'); 

sau khi họ đăng nhập kiểm tra xem nếu 'REDIRECT_URL' hiện diện với

if($this->session->flashdata('redirect_url')) 
{ 
    redirect(base_url().$this->session->flashdata('redirect_url'))); 
} 

Hy vọng điều này giúp đỡ

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