Autor Zpráva
nemeja
Profil
Pěkné odpoledne, po delší době jsem si sednul k PHP a narazil na menší problém. Mám soubor index.php, který mi představuje vstupní bod do aplikace. Z něho se includne soubor login.php, který má v sobě formulář a jakmile se odešle, tak se zároveň i v tom samém souboru zpracuje. zde je ovšem problém - sessions se nechtějí nastavit. Ani hned po nastavení proměnná $_SESSION nic neobsahuje. Sessions mi normálně fungují, to jsem zkoušel. Data z DB jsou v pořádku.

db.php a container.php neobsahují nic pro práci s hlavičkama ani sessions

Děkuji předem za postrčení správným směrem
index.php
<?php
      session_start();

    include_once("db.php");
    include_once("container.php");
    head();
    var_dump($_SESSION['user']);

    if(isset($_SESSION['user']['logged']) && $_SESSION['user']['hash'] == create_user_hash()){
        if(isset($_GET['page'])){
            if($_GET['page'] == "logout"){
                    $nick = $_SESSION['user']['nick'];
                    var_dump($_SESSION);
                    session_destroy();
                    renderSuccess("Uživatel $nick úspěšně odhlášen.");
            }
            if(file_exists("scripts/".htmlspecialchars($_GET['page']).".php")){
                include("scripts/".htmlspecialchars($_GET['page'])).".php";        
            } else include("scripts/home.php");
        } else include("scripts/home.php");
    } else include("scripts/login.php");
    footer();
login.php
  <?php 
    if(isset($_POST['send'])){
        echo "<h1>login</h1>";
        $db = new DB;
        $nick = $db->escape_string($_POST['nick']);
        $pass = $db->escape_string($_POST['pass']);
        $user = $db->query("SELECT password, admin, name, id FROM users WHERE nick = '$nick'")->fetch_object();
        if( $user->password == create_pass($nick, $pass)){
            echo "<h1>login</h1>";
            $_SESSION['user']['logged'] = true;
            $_SESSION['user']['admin'] = $user->admin;
            $_SESSION['user']['name'] = $user->name;
            $_SESSION['user']['id'] = $user->id;
            $_SESSION['user']['hash'] = create_user_hash();
            echo $user->admin, $user->name, $user->id;
            var_dump($user);
        }
    } else {

        echo $error; ?>
        <form action="<?php echo createURL('login'); ?>" method="post">
            Přihlašovací jméno: <input type="text" name="nick"><br>
            Heslo: <input type="password" name="pass"><br>
            <input type="submit" name="send" value="Přihlásit se">
        </form>
        <?php
    }
    
?>
Taps
Profil
nemeja:
máš v login.php na začátku session_start() ?
abc
Profil
Taps:
Session spouští hned na začátku indexu.

nemeja:
Zkus hned za session_start zavolat
var_dump($_SESSION);

Pokud nic, máš zaplé COOKIES?
Joker
Profil
nemeja:
A kam směřuje action toho přihlašovacího formuláře?
nemeja
Profil
abc:
To jsem zkoušel. Vytvořil jsem si test.php kde jsem nechával postupně přičítat 1 a následně vypisovat. Tuhle session mi to vypsalo i v index.php hned po zapnutí session. Dělal jsem to v rámci jednoho projektu



Joker:
vygeneruje to adresa/index.php?page=login
Davex
Profil
nemeja:
Máš zapnnuté vypisování chyb PHP? Nevypisuje se potom na index.php, třeba varování headers already sent?
nemeja
Profil
Dneska jsem to zase koumal. Zvolil jsem kompletně jiné řešení daného problému, jelikož jsem se dozvěděl nové informace k projektu. Rád bych ovšem dořešil, z jakého důvodu to nefunguje, protože mě to samotného zajímá.

Davex:
ano E_ALL
Davex
Profil
Odesílají se přihlašovací údaje na stejnou doménu jako je přihlašovací formulář. Tzn. nemění se proměnná $_SERVER["HTTP_HOST"]?

Pak by tu ještě byla teoretická možnost, že je to v nějaké zastaralé verzi PHP (< 5.4.0) se zapnutým register_globals, ale to by mělo v $_SESSION alespoň něco zůstat, pokud se tam někde nespouští třeba unset($user).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: