PHP geeft halve sessies mee
Ik heb met behulp van een RBAC een mijn personeelssysteem aangestuurd, gisteren deed alles nog zoals het hoort, maar nu heb ik als ik inlog een probleem. De sessies worden niet meegegeven. (Ik gooi alle rollen in een sessie)
Wie kan mij misschien helpen of heeft dit probleem ook wel eens gehad?
Mvg,
Koen
Gewijzigd op 30/09/2013 19:01:42 door Koen Hollander
Edit: Hmm....mijn collega heeft hem te lang gebruikt, en nu is de batterij leeg.... :-(
Zonder gekheid op een stokje: Kom eens met relevante code aan? Ik vraag me af waarom je de levels, groepen in een sessie bewaart? Dat kan je toch direct uit de database ophalen?
Gewijzigd op 30/09/2013 20:44:07 door - Ariën -
Ik heb dit ook 1 keer meegemaakt. Na heel lang zoeken naar de fout besloot ik eens session_start() boven elke pagina te zetten. Wonder boven wonder deed alles het weer! Maar dat is wat ik heb meegemaakt. Als je geen relevante code laat zien kan ik niet zien of je precies dezelfde fout als mij maakte.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
include "global.php";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$sql = mysqli_query($c, "SELECT username,password,id FROM personeel WHERE username='".mysqli_real_escape_string($c, $_POST['username'])."'AND password='".mysqli_real_escape_string($c, sha1($_POST['password']))."'") ;
$row = mysqli_fetch_assoc($sql);
if ($sql == TRUE) {
$_SESSION['username'] = $_POST['username'];
$_SESSION['loggedin'] = TRUE;
$_SESSION['id'] = $row['id'];
$sql2= mysqli_query($c, "SELECT * FROM rollen WHERE id='".$_SESSION['id']."'");
$row2= mysqli_fetch_assoc($sql2);
$_SESSION['add_news'] = $row2['add_news'];
$_SESSION['read_news'] = $row2['read_news'];
$_SESSION['calculate_loon'] = $row2['calculate_loon'];
$_SESSION['absense'] = $row2['absense'];
$_SESSION['precense'] = $row2['precense'];
$_SESSION['add_staff'] = $row2['add_staff'];
$_SESSION['read_staff'] = $row2['read_staff'];
$_SESSION['admin'] = $row2['admin'];
$_SESSION['pub_note'] = $row['pub_note'];
unset ($_POST);
echo '<meta http-equiv="refresh" content="0; URL=landing.php">';
} else {
echo mysqli_error($c); //Hier straks: "Gegevens niet gevonden" van maken
} //Sluit COOKIE/REDIRECT/SQL maken af
} //sluit IF METHOD POST
?>
include "global.php";
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$sql = mysqli_query($c, "SELECT username,password,id FROM personeel WHERE username='".mysqli_real_escape_string($c, $_POST['username'])."'AND password='".mysqli_real_escape_string($c, sha1($_POST['password']))."'") ;
$row = mysqli_fetch_assoc($sql);
if ($sql == TRUE) {
$_SESSION['username'] = $_POST['username'];
$_SESSION['loggedin'] = TRUE;
$_SESSION['id'] = $row['id'];
$sql2= mysqli_query($c, "SELECT * FROM rollen WHERE id='".$_SESSION['id']."'");
$row2= mysqli_fetch_assoc($sql2);
$_SESSION['add_news'] = $row2['add_news'];
$_SESSION['read_news'] = $row2['read_news'];
$_SESSION['calculate_loon'] = $row2['calculate_loon'];
$_SESSION['absense'] = $row2['absense'];
$_SESSION['precense'] = $row2['precense'];
$_SESSION['add_staff'] = $row2['add_staff'];
$_SESSION['read_staff'] = $row2['read_staff'];
$_SESSION['admin'] = $row2['admin'];
$_SESSION['pub_note'] = $row['pub_note'];
unset ($_POST);
echo '<meta http-equiv="refresh" content="0; URL=landing.php">';
} else {
echo mysqli_error($c); //Hier straks: "Gegevens niet gevonden" van maken
} //Sluit COOKIE/REDIRECT/SQL maken af
} //sluit IF METHOD POST
?>
Wat staat er in global.php? Ik kan niet 1 2 3 zien wat daar allemaal in zit...
Koen Hollander op 01/10/2013 09:33:12:
$sql wordt nooit true, dus die hele bende wordt ook nooit in je sessie gezet.
En een gehasht password escapen? Totaal overbodig natuurlijk.
Global:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
@session_start();
//sleep(10);
//VERANDER DEZE BIJ IEDERE INSTALLATIE!
$ID = 6;
////////////////////////////////////////
require ("config.php");
$q1 = mysqli_query($c, "SELECT name FROM systemen WHERE id=".$ID."") or die(mysqli_error());
$r1 = mysqli_fetch_assoc($q1);
$SYS_NAAM=$r1['name'];
?>
<html>
<head>
<title><?php echo $SYS_NAAM; ?></title>
</head>
</html>
<?php
function loggedin() {
if ($_SESSION['loggedin'] == FALSE) {
return false;
} else {
return true;
}
}
function rbac($opvraag) {
$sql = mysqli_query($c, "SELECT * FROM rollen WHERE id='".$_SESSION['id']."' AND '$opvraag' = 1") or die(mysqli_error());
if ($sql == TRUE) {
return true;
} else {
return false;
}//END if/else
}//END FUNCTION
?>
@session_start();
//sleep(10);
//VERANDER DEZE BIJ IEDERE INSTALLATIE!
$ID = 6;
////////////////////////////////////////
require ("config.php");
$q1 = mysqli_query($c, "SELECT name FROM systemen WHERE id=".$ID."") or die(mysqli_error());
$r1 = mysqli_fetch_assoc($q1);
$SYS_NAAM=$r1['name'];
?>
<html>
<head>
<title><?php echo $SYS_NAAM; ?></title>
</head>
</html>
<?php
function loggedin() {
if ($_SESSION['loggedin'] == FALSE) {
return false;
} else {
return true;
}
}
function rbac($opvraag) {
$sql = mysqli_query($c, "SELECT * FROM rollen WHERE id='".$_SESSION['id']."' AND '$opvraag' = 1") or die(mysqli_error());
if ($sql == TRUE) {
return true;
} else {
return false;
}//END if/else
}//END FUNCTION
?>
(Config geeft alleen een SQLi verbinding mee)
Gewijzigd op 01/10/2013 21:50:49 door Koen Hollander
Wow! Waarom staat er een '@' voor je session_start(); ?
Omdat ik niet wil zien dat er al een sessie draait omdat ik niet weet waar die andere vandaan komt
Je weet niet waar de andere vandaan komt? Je kent je eigen code niet? Ik zou dan maar eens op zoek gaan naar die andere. En een '@' is 'bad practice'. Gebruik correcte foutafhandeling.
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/hrm/domains/simplehrm.nl/public_html/folkon/login.php:4) in /home/hrm/domains/simplehrm.nl/public_html/folkon/global.php on line 3
Zie de vele topics hierover.
Koen Hollander op 01/10/2013 21:49:53:
WTF? Lees je de opmerkingen uberhaupt wel, of is iedereen je een beetje voor Jan met de korte achternaam aan het helpen? Wat wordt er nu door Santhe en mij gezegd?
En de headers already sent fout komt hier letterlijk dagelijks voorbij, dus doe even wat moeite voor je je problemen hier dumpt aub.