PHP - çerezlerini kullanarak Yükleme CSS, ancak çerez okunan değil mi?

4 Cevap php

Ben şu anda kullanıcıların özel bir tema seçebilirsiniz bir web sitesi var. Bu tema seçtikten sonra, bir cookie oluşturulur. Çerez doğru CSS dosyasının doğru veri ve puan içerir. Nedense, yeniden ziyaret site üzerinde, tema yüklü değil. Ben çok kolay bir hata olabilir bu yüzden PHP yeni am işaret olmalıdır. Lütfen yardım edin. Teşekkür ederim.

İşte benim kod:

<?php
$stylesArr = array('Default', 'Black', 'Pink', 'Green', 'Red');
if(isset($_GET['theme']) && in_array($_GET['theme'], $stylesArr)) {
    $style = 'CSS/' . $_GET['theme'] . '.css';
    setcookie("theme", $style, time()+(60*60*24*30));
} else {
    if(isset($_COOKIE['theme']) && in_array($_COOKIE['theme'], $stylesArr)) {
        $style = 'CSS/' . $_COOKIE['theme'] . '.css';
    } else {
        $style = 'CSS/Default.css';
    }
}
?>
<link rel="stylesheet" href="<?php echo $style>" type="text/css"media="screen" />

4 Cevap

Bir çerez içine bir dize CSS/Default.css koyarak, ama sonra $stylesArr den Default dize karşı kontrol edilir. Bu satırı değiştirin:

$style = 'CSS/' . $_GET['theme'] . '.css';

Bunun için:

$style = $_GET['theme'];

ve tamam olacak.

Ayrıca, uygulamanızda $ _GET verileri doğrudan kullanma konusunda sizi uyarmak gerekir. Bu ciddi güvenlik sorunlarına yol açabilir, çünkü bunu asla. Her zaman kullanıcı girdileri.

Lütfen setcookie() çağrısında $ yol parametre ayarlamayı deneyin. Geçerli dizine bunu ayarlamak istemiyorsanız, bu varsayılan. Bu durumda, çerez site çapında olmak istiyorum, bu yüzden bu deneyin:

setcookie("theme", $style, time()+(60*60*24*30), '/');

Ayrıca setcookie() çağrı before başka bir çıkış meydana emin olmak gerekir. Bazı HTML veya (değil <?php ?> etiketleri arasındaki boşlukla veya şey dahil olmak üzere) diğer herhangi bir çıkış, aşağıda sayfanızda bu varsa setcookie() çalışmayacaktır.

Sen zaten yazısının başında session_start() sağ aradım emin olmak gerekir.

Konu dışı, ama ben daha çok böyle bu kodu yazarsınız:

define('MONTH_IN_SECONDS', 2592000);
$themes = array('Default', 'Black', 'Pink', 'Green', 'Red');
$theme = reset($themes); //first value is default
if (isset($_GET['theme']) && in_array($_GET['theme'], $themes, true)) {
    $theme = $_GET['theme'];
    setcookie("theme", $theme, time()+ MONTH_IN_SECONDS);
} elseif (isset($_COOKIE['theme']) && in_array($_COOKIE['theme'], $themes, true)) {
    $theme = $_COOKIE['theme'];
}
$themeURL = 'CSS/' . $theme . '.css';