Bir oturum değişkeni unsetting Sorunu

4 Cevap php

Arkadaşlarınızı davet için kullanılan sitemde bir form var. Bu basit bir metin alanı ve bir gönderme düğmesi bulunuyor. Bir hata varsa ben bu sayfaya geri yönlendirme ve bir oturum değişken seti onların ise bir hata mesajı görüntüler.

if (isset($_SESSION['invite_error'])) {
   echo $_SESSION['invite_error'];
   unset($_SESSION['invite_error']);
}

Ben uzakta bu sayfadan ve geri-hata mesajı gelip Ancak, yine de görüntülenir ediliyor. Ben uzak gezinmek ve bir kez daha geri gelirseniz yapılacaktır. Ben o sayfayı yenileyin zaman 1 yenileme ondan kurtulmak, ancak 2 irade almazsınız ... aynı. Ben sadece bu bir değişken unset istiyorum, tüm oturumu yok edemez. PHP version Ben de bir no-cache üstbilgisi kullanarak denedim, bu sayfanın üstündeki session_start () arıyorum, kapalı küresellerle kayıt, 5.2.5 build 6 olduğunu.

Edit: Tam kod eklendi.

<?php 
ob_start();
session_start();

$user_id = $_SESSION['user_id'];
$user_name = $_SESSION['user_name'];

if ($user_id==null) header("Location: /login.php");

if (isset($_SESSION['invite_errors'])) {

    $error = $_SESSION['invite_errors'];
    unset($_SESSION['invite_errors']);

}

require_once("ui/header.php");
?>



<div id="invite" class="content">

    <?php if($error) { ?>
    	<div class="errors round">
    		<?php echo $error ?>
    	</div>
    <?php } ?>

    <h3>Invite Your Friends</h3>

    <div class="invite-form">
    	<form method="post" action="controllers/invite.php">
    		<div class="row">
    			<textarea class="txt-area" name="emails" id="emails" rows="5"></textarea>
    			<div class="tip">Separate multiple email addresses with ,</div>
    		</div>
    		<div class="row-submit">
    			<input type="submit" name="submit" id="submit" class="submit-btn" value="Submit" />
    		</div>
    	</form>
    </div>

</div>

<?php
    require_once("ui/footer.php");
?>

4 Cevap

Start the session before you start the output buffering. Yani, ob_start() geçiş ve session_start() çağırır.

Oturum çerezleri tarayıcıya gönderilen başlıklarında tanımlanır ve tampon başlattığınızda başlıkları tarayıcıya gönderilir olduğundan, before tampon oturumları başlatmak gerekir.

Verdiğiniz örnek çalışması gerekir. Belki oturumu önbellek bazı tür şekilde oluyor. Eğer aşağıdaki gibi kod değiştirerek deneyebilirsiniz:

if (isset($_SESSION['invite_errors']) && $_SESSION['invite_errors']) {

    $error = $_SESSION['invite_errors'];
    $_SESSION['invide_errors'] = false;
    unset($_SESSION['invite_errors']);

    // Explicitly write and close the session for good measure
    session_write_close();

}

Benim durumumda, PHP oturumları kullanarak değer değildir ve sadece hızlı ve kolay bir çözüm olarak tasarlanmıştır. $ _SESSION Davranış her zaman açık değil ama geleneksel anlamda oturumları kullanarak çoğunlukla kaçınılmazdır. Kendi id Sorun ve belki de bir veritabanında, bu karşı çerezleri ve mağaza oturum değerlerini belirteci. Bu ayrıca sunucular arasında ölçeklenebilir olmanın yararı vardır.

Belki hata echo'ing sonra değerini değiştirebilirsiniz

if (isset($_SESSION['invite_error'])) {
   echo $_SESSION['invite_error'];
   $_SESSION['invite_error'] = null;
   unset($_SESSION['invite_error']);
}