2013-04-12 26 views
5

Tôi đã có một trang đăng nhập sau đó tôi đã thực hiện một liên kết đến một trang gọi là logout và nó có chứa mã này:Ngăn chặn người dùng từ các trang thấy rằng yêu cầu một phiên

logout.php

<?php 

session_unset(); 
session_destroy(); 
header("Location:"); 

?> 

Tuy nhiên, khi tôi đăng xuất rồi nhấn nút quay lại, nó sẽ đưa tôi trở lại. Làm thế nào để thay đổi nó để nó yêu cầu bạn đăng nhập lại trước khi hiển thị cho bạn trang trước của bạn?

+0

Đảm bảo trình duyệt không lưu vào bộ nhớ cache trang. – Anne

+0

Tôi không biết làm thế nào để làm điều đó, bạn có thể chỉ cho tôi bằng cách đăng không? – Script47

+0

Đây là cách trình duyệt hoạt động, trang không được tải lại khi bạn nhấn nút quay lại. Ví dụ: tôi sẽ đăng nhận xét này, nhấp vào liên kết đến một câu hỏi khác và nhấn lại. Tôi sẽ không thấy bình luận của tôi. – Tchoupi

Trả lời

1

Bạn chưa đặt bất kỳ vị trí nào để chuyển hướng đến.

nên là:

header("Location:http://example.com/login.php"); 

Bằng cách này khi bạn đăng xuất, nó sẽ chuyển hướng trình duyệt để login.php.

EDIT:

Ngoài ra, nó sẽ giúp thêm một điều kiện xác nhận phiên tới trang chính của bạn.

Somenthing như:

if(!isset($_SESSION)) 
{ 
    header("Location:http://example.com/login.php"); 
} 
+0

Tôi đã làm, nhưng cho điều này đoạn mã tôi đã xóa nó. – Script47

+0

Ok.Hãy nhớ @ Script47, rằng khi bạn nhấn lại trong trình duyệt, bạn đang truy cập vào phiên bản được lưu trong bộ nhớ cache của trang của bạn. –

+0

Vì vậy, nếu tôi không lưu vào bộ nhớ đệm trang web, nó có hoạt động không? – Script47

3

Trên trang bạn sẽ quay lại (hoặc bất kỳ trang nào cho vấn đề đó), bạn cần kiểm tra xem người dùng có đăng nhập hay không (nghĩa là có phiên hợp lệ) và nếu không, hãy chuyển hướng họ đến trang đăng nhập.

Ngoài ra, nó có thể giúp bạn thêm một số tiêu đề không lưu vào bộ nhớ cache vào đoạn mã cụ thể này.

1

Trước khi tải mỗi trang (hoặc ít nhất, mỗi PRIVATE/RESERVED trang), bạn nên kiểm tra biến $ _SESSION để xác định nếu người dùng đang đăng nhập một cách hợp pháp hay không.

Nếu bạn không thực hiện kiểm tra này, mọi người sẽ có thể truy cập mọi trang trên trang web của bạn nếu họ có liên kết trực tiếp đến trang đó. Họ có thể thấy một phiên bản bị hỏng của trang, nhưng quyền truy cập được cấp cho người dùng chưa đăng nhập.

1
<?php 
    session_start(); 
    session_unset(); 
    session_destroy(); 
    session_write_close(); 
    setcookie(session_name(),'',0,'/'); 
    session_regenerate_id(true); 
?> 

nguồn: Manual

1

thử này để kiểm tra trên mỗi trang nếu người dùng đang đăng nhập

if (!$_SESSION['logged_in']) { //you would have to make $_SESSION['logged_in'] when they login 
header('location: login.php'); 
} 

tất cả điều này được nói nếu $ _SESSION [ 'logged_in'] không được thiết lập chuyển hướng họ đến trang đăng nhập.

Bạn cũng cần phải thực hiện các kiểm tra khác để đảm bảo an toàn.

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