2016-04-13 13 views
0

Bu gönderinin many duplicates olduğunu biliyorum, ancak bunların hiçbiri açıklayıcı bir cevap, bir sürü kod ve hepsi bu değil. Neler olup bittiğini daha iyi anlamak istiyorum.Geriye dön: Belge Süresi doldu/Önbellek Eksik

Kullanıcıların her sayfada bilgi girdiği sayfalar dizisi var. Bununla birlikte, bir belgeyi son kullanma tarihi geçmiş/önbellek eksik hatası almadan önceki bir sayfaya geri dönmelerini istiyorum. Bunun POST tarafından kaynaklandığını biliyorum, çünkü sunucu bu gönderi bilgilerine ihtiyaç duyuyor, dolayısıyla yeniden gönderilmesi gerekiyor. Ama verilen çözümleri anlamıyorum.

if ('GET' == $_SERVER['REQUEST_METHOD']) { 
    //display view 
} 
else if ('POST' == $_SERVER['REQUEST_METHOD']) { 
    //process input 
    //update session 
    header('Location: /next/page/to/view', true, 303); 
} 

Ama bu ne yapar:

yukarıda bağlantılı cevabı bu önermektedir? GET ve POST'a bakıyorum ve hala bunun ne yaptığını anlamıyorum, nasıl kullanmalıyım. Mevcut sayfalar SESSIONs kullanıyor, ör. 2. sayfada, sayfa 1 form gönderildikten sonra:

if (isset($_POST['input'])) { 
    $input = $_POST['input']; 
    $_SESSION['example'] = $input; 
} 

ve sonra 3. sayfadaki:

if (isset($_POST['otherinput'])) { 
    $otherinput = $_POST['otherinput']; 
    $_SESSION['otherexample'] = $otherinput ; 
} 
if (isset($_SESSION['example'])) { 
    $input = $_SESSION['example']; 
} 

Ama

yenilemek gerek olmadan, geri giderken bu işe yaramaz dediği gibi sayfa. Önerilen çözümü nasıl kullanırım ve lütfen açıklamasına bakın. neler oluyor. Öğrenmek için buradayım, ama maalesef birçok cevap sadece bazı kodlar veriyor ve hepsi bu. Ayrıca bir açıklamadan hoşlanıyorum!

Düzeltme. Bunun işe yaradığını da gördüm, ama bu durumda da neden anlamıyorum. Benim için daha fazla açıklama gerekiyor. En iyi yol nedir?

<?php 
session_cache_limiter('private'); 
session_start(); 
header('Content-Type:text/html; charset=utf-8'); 
?> 
+1

Benim izlenimim gibi bir kod sorunu olmadığını ancak tarayıcı bir sayfa POST verilerini talep ettiğini tespit ettiği veya form belli sayfaya gönderir ve böylece tarayıcı olacaktır Bir sayfanın "süresi dolduğunda", üzerindeki koddan bağımsız olarak karar verici. Bu tarayıcı yanıtını geçersiz kılmak/alt etmek için kod uyarıları olması muhtemeldir, ancak dilediğiniz gibi, her formun SESSION değerini POSTED verilerle dolduran ve daha sonra kullanıcıyı bir "iletmeye yönlendiren bir yakalama sayfasına gönderilmesini sağlayabilirsiniz." Statik bir "sayfa üstbilgi" ile, sonra "geri" giderek, statik, nüfuslu bir sayfaya gidiyorlar. – Martin

+0

(Benim izlenimim tamamen yanlış olabilir) – Martin

cevap

1

Martin'in yorumu oldukça doğru, ancak biraz detaylandırıyorum.

Aşağıdaki örneği ele alalım: Sayfa 1'de POST aracılığıyla sayfa 2'ye gönderilen bir form vardır. Sayfa 2 sonuçları ve sayfa 3'e olan bir bağlantıyı gösterir. Page 1 ayrıca sayfa 4'e bir bağlantı içerir. sadece boş. biri 1.

  • Tarayıcı O bir GET isteği kullanarak aldım sayfa 1. görüntüleyen sayfadaki bağlantıyı tıkladığında

    Şimdi, ne olur bakalım.
  • Bağlantıyı tıklatırsanız ve tarayıcı başka bir GET isteği gerçekleştirir sayfa 4 için
  • Geri düğmesini tıklarsanız tarayıcı geçmişinde son sayfaya bakar. Bir GET isteği kullanarak var, bu yüzden statik veri olması gerektiğini varsayar. Geri dönüş yok, her şey yolunda.

Ancak, 2. ve 3. sayfalarda veri gönderdiğinizde ne olur?

  • Tarayıcı görüntüler 1
  • Sen formda veri girmek ve
  • Sayfa 2 görüntülenir POST üzerinden teslim ve geri düğmesini tıklarken Şimdi sayfayı 3
  • almak için bağlantıyı tıklayın sayfa tarayıcı tarihine tekrar bakar. Sayfa 2'de görüntülendi, ancak POST yoluyla elde etti.Bu, muhtemelen bir şeyler değiştiren bir eylem yaptığınız anlamına gelir. Sayfa 2 dinamik olmalı, bu yüzden sadece aynı verileri tekrar göndererek geri yüklenebilir. Kullanıcı bunu aktif olarak yapmak istemeden veri göndermek iyi bir uygulama olarak kabul edilmez, dolayısıyla tarayıcı kullanıcıdan veriyi tekrar göndermesi gerekip gerekmediğini sorar. Soru tüm tarayıcılarda farklıdır. Bazılarında "tekrar gönder" gibi mi? ve diğerleri daha çok "naa, bunu tekrar yapmak istemezsiniz. Eylemin süresi doldu. Güven bana." Yani

, tekrar veri göndermeyi ve uyarıyı tetiklemeden sayfayı görüntülemek için ne yapabilirim? Bir tarayıcı bilgiyi aldığında, bir sitenin yerini değiştirdiyse (http Durum 301 ve 302), yeni URL'yi eski yerine geçmişinde depolar. Bunu, yayınlanan verilerle yapmamız gereken tüm şeyleri yaparak ve tarayıcıyı farklı bir URL'ye yönlendirerek kullanacağız. Tarayıcı yeni sayfayı almak için bir GET isteği gerçekleştirecektir. Dolayısıyla, geri düğmesini tıklattığınızda GET isteği, tarayıcı geçmişinde ve POST isteğinde değil kaydedilir. Bu yüzden uyarı verilmiyor.

Ben bu anlaşılabilir umut

;)