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(); <?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 |
#2 · Zasláno: 10. 7. 2015, 19:07:39
nemeja:
máš v login.php na začátku session_start() ? |
||
abc Profil |
#3 · Zasláno: 10. 7. 2015, 19:25:49
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 |
#4 · Zasláno: 10. 7. 2015, 19:28:26
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 |
#6 · Zasláno: 11. 7. 2015, 13:51:37
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) .
|
||
Časová prodleva: 9 let
|
0