Dizin değiştirirken PHP Sessions veri kaybolur?

5 Cevap php

Ben PHP oturumları kullanarak basit bir giriş sistemi var, ama sadece son zamanlarda belirli bir dizinin sayfaları değil ziyaret ederseniz bile, oturum açmış değil (/ login /) her zaman bayraklı olacak gibi görünüyor. Ben dizinleri değiştirmek zaman benim oturum verileri (diyelim için / login / user /) kayıp ediliyor gibi görünüyor.

Ben sorunu ortaya beri kodunu kendimi dokundu sanmıyorum, benim web barındırma oturum verileri silmek istiyorsunuz benim PHP kurulum için yapmış olabilir bir şey var, ve bir çözüm var mı?

EDIT:
Inside each file that needs authorization, it loads a loginfunctions.php file which calls session_start() and checks the login. Files which work in /login and i copy and paste into /login/user stop working, even though i update all the relevant paths and links.

EDIT2: Okay, some code.

Bana hata vererek gerçek sayfalarında, bu auth olduğunu. kodu:

require_once("../../../includes/loginFunctions.php");

$login = new login; 
$login->checkLogin(0);

LoginFunctions.php İçinde şudur:

class login{

    function checkLogin($requiredAccess){

            session_start();

            if($_SESSION['accesslevel'] < $requiredAccess || $_SESSION['logged_in'] != TRUE){
                die("You don't have access to this area. If you should have access, please log in again. <a href='/login/'>Login</a>");
            }

            if (isset($_SESSION['HTTP_USER_AGENT'])){
                if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])){
                    session_destroy();
                    die("Bad session. Please log in again. <a href='/login/'>Login</a> ");
                }
            } else {
                $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
            }

            if (!isset($_SESSION['initiated'])){
                session_regenerate_id();
                $_SESSION['initiated'] = true;
            }

    }

}

$ RequiredAccess değişkeni bu sayfaya erişmek için gereken erişim seviyesi, yani veritabanında 3 bir accesslevel varsa seviye 0, 1, 2 ve 3 sayfalarını görüntüleyebilirsiniz. Fonksiyonu ana sayfasında denir ve onlar oturum zaman $ _SESSIONS tanımlanan geçerli kullanıcının erişim seviyesine göre ne zaman bu belirtilen

Ben bu sayfalara erişmek çalıştığınızda "vb bu alana erişimi yok 'hatası alıyorum i $ _SESSION değişkenleri yazdırmayı denerseniz, hiçbir şey göstermektedir;.. Onlar boş görünebilir Ancak, eğer mükemmel çalışır ve tüm değişkenlerin ince yazdırmak, / login / klasör (bir üst düzey) için dosyayı taşımak ve bağlantıları güncelleştirmek. Bu bana kod çalışmıyor parçası olmadığını düşünüyorum yapar, ama benim PHP bazı ayar yüklemeniz benim haber vermeksizin değiştirilebilir olmuştur.

5 Cevap

belki değil / login sayfaların yalvarıyor de session_start () çağırarak değil / ..?

Onlar php.ini ayarını session.cookie_path değişti mümkündür.

Eğer session_start arayın ve emin çerez yolunu kendiniz ayarlayabilirsiniz yapmadan önce session-set-cookie-params aramalısınız. Eğer oturum için geçerli olmasını istediğiniz en üst dizine ayarlayın. EG Eğer /login o /login ve /login/user için geçerli olacak şekilde ayarlayın eğer. Eğer etire site olmayı yolunu ayarlamak için oturum geçerli olmak istiyorsanız /

i had a similar issue. you may want to use: <? setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1); ?>

ya da benzer bir şey. i çerez ve oturum değişkenleri bir istenen değişik çözüm olduğunu biliyorum, ama bu benim sorunu temizlemek başardı.

See here for documentation

Sizden oturum değişkenleri erişmek istediğiniz her dizinde aynı php.ini dosyası olduğundan emin olun.

Eğer yanlış dostu URL'ler yapmak için dizin kullanmak gerekir neden bu ...

) (Eğer oturumu gerekir her zaman session_start aramak için unutma.