| 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: 11 let
|
|||
0