Nasıl bir kullanıcı PHP sistemden çıktıktan sonra geri dönmek için izin veremez?

7 Cevap

Ben sadece bir PHP oturum açma komut dosyası yazdı ve ne başarmak için çalışıyorum olduğu için kullanıcı tıklama onlar giriş yaptıktan sonra, bağlantı oturumu bakılmaksızın tarayıcınızın geri butonuna tıklayarak, onlar sayfasına erişemez zaman.

Burada çıkış fonksiyonudur:

//Start the Session
session_start();
session_destroy();

header("location:login.php");
exit();

Ben tüm sayfalara aşağıdaki kodu yerleştirin yoktu ve bu işi yapmak değil gibi görünüyor:

header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Date in the past
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");  // HTTP/1.1
header ("Pragma: no-cache");

//Start the Session
session_start();

Herhangi bir öneriniz?

7 Cevap

Küresel oturumu hala doğru değer ise kullanıcı kaydediliyor, kontrol edin.

print_r($_SESSION);

Bunun nedeni ne olur bir yönlendirme ve oturumun yok sunucuya yol yazılmaz kuvvet olduğunu, bir session_destroy ve daha sonra bir başlık yönlendirme yapıyor olmasıdır.

Sen sunucusunda istemci tarafı geri butonu işleyişini kontrol edemez. Sen istemci javascript kullanarak geçmiş verileri yok edebilir.

Istemcisi tamamen no-cache başlıkları göz ardı edebilirsiniz.

Örneğin herhangi bir giriş $ _SESSION, varsa sadece yönlendirme:

//on your protected pages
session_start();
if(!$_SESSION['logged']) {
    header("location:login.php");
}

Bu benim çıkış yaptığı budur:

session_start();
// Unset all of the session variables.
$_SESSION = array();
// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (isset($_COOKIE[session_name()])) {
	setcookie(session_name(), '', time()-42000, '/');
}
// Finally, destroy the session.
session_destroy();

Ben oturumda şey saklamak ve daha sonra her sayfada yükü kontrol etmek gerektiğini düşünüyorum. İşte ben geçmişte bunu yaptık nasıl

Login Script (simplified)

session_start()
// register necessary session variables
$_SESSION['username'] = $username;

Logout Script:

session_start();

// destroy the session and check to make sure it has been destroyed
session_destroy();
    if(!session_is_registered('username')){
    	$loginMessage = 'You have been logged out.';
    	include 'index.php';
    	exit();
    }

// if we're still here, some bad juju happened

Top of Every Page

session_start()

// make sure user is logged in
if (!$_SESSION['username']) {
    $loginError = "You are not logged in.";
    include("index.php");
    exit();
}


Ben SSL ile HTTPS kullanmanızı öneririm. Sen SSL oturumu kapatın ve olmayan bir şifreli sayfasına geri dışarı kullanıcıyı tekme olabilir.

Çoğu tarayıcılarda farklı önbelleğe alma planları uygulamak.

Örneğin, Opera Back tıklayabilirsiniz ve sayfa süresi doldu bile, sunucuya herhangi bir veri göndermeden doğrudan bellek sayfasında veri çeker. Yenile vurursanız, elbette, sunucu giriş gerektirir.

Internet Explorer'da, çok farklı işlenir oldu ve form verilerini sunucuya yollanılır.

Bu session_destroy() fonksiyonlar olabilir. Bu deneyin:

unset($_SESSION);

* $ SESSION değişken Burada saklanan bir şey temizlemek olacaktır un ayarı.

Çıkış unset() on PHP.net

$_SESSION['blah'] = '';

Bu da çalışır ..