Post / yönlendirme / Alın tasarım modelini anlamak için çalışılıyor (PHP ile uygulanan)

0 Cevap php

Tümü,

Önceden Üzgünüm - Ben bir PHP uzmanı veya tasarım desenleri bilgili değilim, bu yüzden bu soru biraz temel olabilir ...

Her neyse, ben bir giriş gerektiren bir web uygulaması üzerinde çalışıyorum.

Planım böyle bir şey olmasıdır:

index.php: Bu sayfa, kullanıcıların bir kullanıcı adı ve şifre girmek için izin basit bir formu içerir. Form girişlerini POST edecek ...

login.php: Bu sayfa index.php gelen girdileri almak ve bir veritabanına karşı bu kimlik bilgilerini kontrol edecektir. Girişlerin herhangi biri eksik veya kimlik başarısız kontrol ederseniz, php script olacak REDIRECT kullanıcı geri kullanarak index.php:

header('Location: http://www.mydomain.com/index.php');

Kimlik bilgilerinin geçerli olup, daha sonra login.php kullanıcının kimliği doğrulanmış durumunu kurmak için bir oturum oluşturur:

session_start();
$_SESSION['authenticated'] = true;

Ardından, kullanıcı neler erişim tipi belirler. O "level 1" erişimi varsa, komut dosyası kullanarak level1.php için kullanıcıyı yönlendirir:

header('Location: http://www.mydomain.com/level1.php');

Kullanıcı "seviye 2" erişimi varsa, komut dosyası kullanarak level2.php için kullanıcıyı yönlendirir:

header('Location: http://www.mydomain.com/level2.php');

Level1.php veya level2.php ulaşıldığında Son olarak, yaptıkları ilk şey oturumu kontrol etmektir. Kullanıcı kimlik doğrulaması değilse, index.php onu geri yönlendirme:

session_start();
if (!isset($_SESSION['authenticated']) {
    header('Location: http://www.mydomain.com/index.php');
} else {
    // proceed to display the page
}

Level1.php ve level2.php bu onay giriş yapmadan, doğrudan o sayfaya erişmesini engellemek olacaktır olması

Benim ilk sorun şudur: Bu basit mantık aracılığıyla ilk defa GETİREMESE - level1.php, "isset ($ _SESSION ['doğrulanmış']" ALWAYS false döndüren ulaşıldığında, böylece kullanıcı her zaman geri yönlendirilir o aynı kimlik bilgilerini ikinci kez girerse. index.php, süreç olması gerektiği gibi çalışıyor.

Kısacası, ben anlamıyorum nedenlerle, bu login.php tarafından ayarlanır oturum level1.php tarafından bulunan değil gibi görünüyor - Çünkü yönlendirme varsayalım. Diğer bir deyişle, level1.php üzerinde kontrol bir tur istemci tarayıcısına yapılmadıkça / kadar başarısız görünüyor.

Giriş gerektirir her site zaten bu sorunu çözmüştür beri, bu bir roman sorun olmamalı, ve bunun için bir çok kurulmuş desen onların olmalıdır. Bunu nasıl ele almalıdır?

Ilgili bir soru ... Ben burada daha önce sorulan benzer sorular gördüm, ve en cevaplar genellikle sayfaları kendilerine geri ilanı hangi bir çözüm içerir. Bu biraz garip görünüyor - ideal, ben her PHP sayfası belirli bir görevi yerine var istiyorum:

  • index.php - display a form to capture credentials, then post them to login.php
  • login.php - evaluate the user's credentials, then direct them to the appropriate page
  • level1.php & level2.php - display the appropriate content

Bu hatalı bir kurulum mı? Eğer öyleyse, daha iyi, kurulum ne?

Ve genellikle - ikinci sayfa oturumu okuyabileceği herhangi bir yolu var - bir sayfa bir oturumu kurar, daha sonra başka bir sayfaya kullanıcı yönlendirir?

Post / Yönlendirme / Get hakkında Wikipedia'da büyük bir sayfası var:

http://en.wikipedia.org/wiki/Post/Redirect/Get

Ama bu benim için küçük bir kavramsal - Ben bunu belirli sayfalara referanslarla izah görmek istiyorum:

Örneğin "sayfa B", "sayfa B" için "sayfa A" Yayınlar Veri bir form kullanıcı için "sayfa C", vb yönlendirir ..

Ve, ben yönlendirmeler kullanırken oturumları kabul edilmez eğer, seans ile uygulanan nasıl anlamıyorum.

Herhangi bir tavsiye ve anlayışlar için şimdiden çok teşekkürler.


[UPDATE]

Matt Ball Yorumlarınız için teşekkürler, ben sorunu rafine ettik:

login.php oturum ayarı ve bir sonraki ekrana kullanıcı yönlendirme edildi:

session_start();
$_SESSION['authenticated'] = true;
header('Location: http://www.mydomain.com/level1.php');

Level1.php o oturuma kontrol Ancak, "doğrulanmış" idi NOT SET:

session_start();
echo (isset($_SESSION['authenticated']); // returns false

Ancak, login.php değişti eğer ki yerine mutlak bir birinin bir RELATIVE url yönlendirildi başlık:

session_start();
$_SESSION['authenticated'] = true;
header('Location: level1.php');

Beklediğim gibi Sonra, level1.php çalışır:

session_start();
echo (isset($_SESSION['authenticated']); // now returns true

Göreli URL bir fark yapar neden ben anlamıyorum, ama yok. Yani, en azından benim acil sorun giderilmiştir.

Yorumladı herkese çok teşekkürler!


Cheers, Matt Stuehler

0 Cevap