sessions werken niet!

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Jony V

Jony V

25/12/2013 00:39:51
Quote Anchor link
Beste forumleden,

Ik krijg mijn sessions niet aan de praat en ik weet niet wat ik fout doe.
Ik heb 3 bestanden: registreer.php, login.php en profiel.php (ze beginnen allemaal met de regel session_start();

In login.php is er een query die kijkt of de ingevoerde formdata klopt, en maakt een sessie. Om dit te controleren staat hier bovenaan in het bestand (tijdelijk, na session_start();):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
if (isset($_SESSION['id'])) {
    print 'LOGIN.PHP: SESSIE ID GEMAAKT, INGELOGD!';
    exit();
} else {
    print 'LOGIN.PHP: GEEN SESSIE ID, NIET INGELOGD!';
//    exit();
}


Aangezien de gebruiker enkel profiel.php mag zien wanneer hij ingelogd is, heb ik dit soort "if" nodig.
Om te testen bij profiel.php, staat hier bovenaan in het bestand (ook tijdelijk, na session_start();

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
if (!(isset($_SESSION['id']))) {
    print 'PROFIEL.PHP: GEEN SESSION ID: NIET INGELOGD!';
    exit();
} else {
    print 'PROFIEL PHP: SESSION ID: INGELOGD!';
    exit();
}


En ook bij registreer.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
if (isset($_SESSION['id'])) {
    print 'REGISTREER.PHP: INGELOGD!';
    exit();
} else {
    print 'REGISTREER.PHP: NIET INGELOGD!';
    exit();
}



De session id registreren in login.php werkt, bij refresh zegt hij dan ook dat ik ingelogd ben. Echter profiel.php en registreer.php zeggen dat ik NIET ingelogd ben. Ik weet echt niet wat ik fout doe. Alle pagina's beginnen met
Quote:
session_start();
. Weet iemand het?


- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken i.p.v. quote-tags. Deze zijn bedoeld voor citeren van teksten..
Gewijzigd op 25/12/2013 01:40:37 door - Ariën -
 
PHP hulp

PHP hulp

20/04/2024 15:00:27
 
Ozzie PHP

Ozzie PHP

25/12/2013 00:50:57
Quote Anchor link
Hoe sla je de sessie op in login.php?

Even een andere opmerking. De manier waarop je je pagina's nu beveiligt is zeer onveilig. Is dit tijdelijke code?
 
Jony V

Jony V

25/12/2013 01:01:15
Quote Anchor link
Ik heb een query waarin ik oa de user id mee ophaal, daarna stel ik $_SESSION['id'] gelijk aan deze user id.

Bedankt voor de tip, ik ben nog maar net begonnen met php. Hoe zou ik dit veiliger kunnen maken?
 
Ozzie PHP

Ozzie PHP

25/12/2013 01:05:26
Quote Anchor link
>> Ik heb een query waarin ik oa de user id mee ophaal, daarna stel ik $_SESSION['id'] gelijk aan deze user id.

Ja, maar de vraag was of je de code even wil laten zien.

>> Bedankt voor de tip, ik ben nog maar net begonnen met php. Hoe zou ik dit veiliger kunnen maken?

Je controleert nu alleen maar of er een ID bestaat. Je controleert niet wat de inhoud is. Dat lijkt me niet heel veilig.
 
Jony V

Jony V

25/12/2013 01:21:08
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$query = mysqli_query($connectie,"SELECT * FROM users WHERE emailaddress='$emailaddress' AND password='$password' AND actief='1'");
$login_check = mysqli_num_rows($query);
   if ($login_check > 0) {
       while ($row = mysqli_fetch_array($query)) {
       // session status
           $_SESSION['status'] = 'logedin';
       // user id naar session
           $uid = $row['uid'];
           $_SESSION['id'] = $uid;
       // username naar session
           $username = $row['username'];
           $_SESSION['username'] = $username;
       // normaal zou dit hieronder een redirect zijn, maar totdat het werkt heb ik het even vervangen
           print 'De sessie is gemaakt.';
           exit();
      } else {

$errormessage = 'Foute data. Probeer opnieuw.';
}
Gewijzigd op 25/12/2013 01:41:09 door - Ariën -
 
Ozzie PHP

Ozzie PHP

25/12/2013 01:33:49
Quote Anchor link
Er kan een hoop aan verbeterd worden, maar ik duik zo m'n bed in. Morgen zullen er wel mensen zijn die je wat tips kunnen geven.
 
Ivo P

Ivo P

25/12/2013 08:57:33
Quote Anchor link
Geef op regel 5 eens een var_dump($row);
En voor de exit een var_dump($_SESSION);

Isset geeft ook false als je var "leeg" is

Http://php.net/isset
 
Jony V

Jony V

25/12/2013 09:46:31
Quote Anchor link
Ok, maar doe ik de session dan niet weg? Op login.php krikg ik de melding dat de sessie gemaakt is, toch zeggen profiel.php en registreer.php iets anders.

Toevoeging op 25/12/2013 10:05:37:

Ik heb een echo toegevoegd aan de 3 bestanden, zodat ze de session id, username en status echo-en.
Op login.php doet hij dat ook, met de correcte gegevens.
De sessie wordt dus gecreërd maar om één of andere reden wordt deze sessie niet overgenomen in de andere bestanden? Het lijkt net alsof de sessie pagina gebonden is.
Gewijzigd op 25/12/2013 10:08:42 door Jony V
 
Bart V B

Bart V B

25/12/2013 11:20:37
Quote Anchor link
Heb je ook bovenin de andere scripts staan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
session_start();

// rest van je script
?>
 
- Ariën  -
Beheerder

- Ariën -

25/12/2013 11:24:15
Quote Anchor link
Wat wij dumpen noemen met de betekenis van iets weggooien, betekent in de programmeerwereld de inhoud van een variabele, functie ergens opslaan of op het scherm tonen.
 
Ivo P

Ivo P

25/12/2013 12:03:06
Quote Anchor link
En geeft echo session_id(); op alle scripts dezelfde waarde?
 
Jony V

Jony V

25/12/2013 15:11:16
Quote Anchor link
session_start(); staat op elke pagina.

Enkel bij login.php staan de (correcte) gegevens, bij de andere bestanden staat er niets, is het leeg.
 
Obelix Idefix

Obelix Idefix

25/12/2013 16:09:21
Quote Anchor link
Hoe benader je de afzonderlijke pagina's?
Als ik kijk naar login.php zie ik nergens dat je (automatisch) verwijst naar profiel.php
 
Jony V

Jony V

25/12/2013 18:03:16
Quote Anchor link
Dat zou ik normaal doen waar nu staat "print 'De sessie is gemaakt.';". Daar staat normaal een header voor een redirect, maar toen werkte het ook niet, dus heb ik het even veranderd.

Even een vraagje: als er op profiel.php session_start(); staat, maakt het dan uit of je hier automatisch naar doorgestuurd word?
Gewijzigd op 25/12/2013 18:03:45 door Jony V
 
- SanThe -

- SanThe -

25/12/2013 18:13:24
Quote Anchor link
Zet dit eens helemaal als eerste in je bestand:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

// rest
?>


En laat eens een compleet bestandje zien die niet werkr.
Sessions zijn namelijk helemaal niet moeilijk.
 
Jony V

Jony V

25/12/2013 22:32:10
Quote Anchor link
Dit is mijn login.php, hier herkent hij de session id etc:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php
// LOGIN.PHP

session_start();

// redirect als user al ingelogd is
if ((isset($_SESSION['id'])) && ($_SESSION['id']!='')) {
    header("Location: profiel.php");
    exit();
}


// connectie met database
require_once 'connectie.php';


// login form data
if (isset($_POST['emailaddress'])) {
    $emailaddress = preg_replace("/[^@.\/\A-Za-z0-9_]/","", $_POST['emailaddress']);
    $password = preg_replace('/[^A-Za-z0-9\-]/', '', $_POST['password']);
    $password = hash("sha512", $password);

// errormessage
$errormessage = '';
    if (!$emailaddress) {
        $errormessage = 'Please fill in your email address.';
    }

    else if (!$password) {
        $errormessage = 'Please fill in your password.';
    }


$query = mysqli_query($connectie,"SELECT * FROM users WHERE emailaddress='$emailaddress' AND password='$password' AND actief='1'");
$login_check = mysqli_num_rows($query);
    if ($login_check > 0) {
        while ($row = mysqli_fetch_array($query)) {
        
            $_SESSION['status'] = 'signedin';
        
            $uid = $row['uid'];
            $_SESSION['id'] = $uid;
        
            $username = $row['username'];
            $_SESSION['username'] = $username;
        
            header("Location: profiel.php");
            exit();
        }
    }
else {
        $errormessage = 'Incorrect data. Please try again.';
    }
    
}


?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="/style/css/style.css" rel="stylesheet" type="text/css" />
<title>Login</title>
</head>

<body>

<div class="section">
 <div class="main-wrap">
  <?php echo $errormessage; ?>
  <form action="login.php" method="post" enctype="multipart/form-data">
  <label>Email address</label>
  <input name="emailaddress" type="text" value="<?php echo $emailaddress; ?>" />
  
  <label>Password</label>
  <input name="password" type="password" />
  
  <input name="submit" type="submit" value"Send" />
  </form>
 </div>
</div>

</body>
</html>


Toevoeging op 25/12/2013 22:40:20:

Dit is registreer.php:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<?php

// REGISTREER.PHP

session_start();

// Redirect als user al ingelogd is
if ((isset($_SESSION['id'])) && ($_SESSION!='')) {
    header("Location: profiel.php");
    exit();
}


// connectie
require_once "connectie.php";


if (isset($_POST['username'])) {

$username = preg_replace('/[^A-Za-z0-9\-]/', '', $_POST['username']);
$username = str_replace(' ', '', $username);
$realname = preg_replace('/[^A-Za-z\-]/', '', $_POST['realname']);
$emailaddress = preg_replace("/[^@.\/\A-Za-z0-9_]/","", $_POST['emailaddress']);
$password = preg_replace('/[^A-Za-z0-9\-]/', '', $_POST['password']);

// checking if everything is filled in

$errormessage = '';

if ((!$username) || (!$realname) || (!$emailaddress) || (!$password)) {

if (!$username) {
    $errormessage = 'Please fill in your username.';
}
else if (!$realname) {
    $errormessage = 'Please fill in your real name.';
}
else if (!$emailaddress) {
    $errormessage = 'Please fill in your emailaddress.';
}
else if (!$password) {
    $errormessage = 'Please fill in your password.';
}

}
else {

// kijken of dubbel

$query_username = mysqli_query($connectie, "SELECT uid FROM users WHERE username='$username' LIMIT 1");
$query_email = mysqli_query($connectie, "SELECT uid FROM users WHERE emailaddress='$emailaddress' LIMIT 1");
$username_dubbel = mysqli_num_rows($query_username);
$emailaddress_dubbel = mysqli_num_rows($query_email);

if ($username_dubbel > 0) {
    $errormessage = 'This username is already taken.';
}

else if ($emailaddress_dubbel > 0) {
    $errormessage = 'This emailaddress is already registered.';
}


else {
    $hashedpass = hash("sha512", $password);

    $user_query = mysqli_query($connectie, "INSERT INTO users (username, realname, emailaddress, usertype, active, password, signupdate)
    VALUES ('$username', '$realname', '$emailaddress', 'contributor', '0', '$encryptedPassword', now())"
) or die (mysql_error());

    $uid = mysqli_insert_id($connectie);

    print 'Registered successfull';
    exit();
    
}
}
}


?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="/style/css/style.css" rel="stylesheet" type="text/css" />
<title>Sign up</title>
</head>

<body>

<div class="section">
 <div class="main-wrap">
  
  <?php echo $errormessage; ?>
  
  
  <form action="registreer.php" method="post" enctype="multipart/form-data">
    
  <label>Username</label>
  <input name="username" type="text" value="<?php echo $username; ?>" />
  
  <label>Real name</label>
  <input name="realname" type="text" value="<?php echo $realname; ?>" />
  
  <label>Email address</label>
  <input name="emailaddress" type="text" value="<?php echo $emailaddress; ?>" />
  
  <label>Password</label>
  <input name="password" type="password" value="<?php echo $password; ?>" />
  
  <input type="submit" name="submit" value="Submit" />
  
  </form>

  
 </div>
</div>

</body>
</html>


Toevoeging op 25/12/2013 22:43:46:

en dit is profiel.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
39
40
41
42
43
44
45
46
47
48
<?php

// PROFIEL.PHP

session_start();

// connectie db
require_once 'connectie.php';

// controleren of user ingelogd is
if (isset($_SESSION['id'])) {

    $uid = $_SESSION['id'];
    $username = $_SESSION['username'];
    
}

else {
    
    header ("Location: login.php");
    exit();
    
}


$userquery = mysqli_query($connectie, "SELECT * FROM users WHERE uid='$uid'");
while ($userdata=mysqli_fetch_array($userquery)) {
    $EmailAddress = $getUserData['emailaddress'];
}



?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="/style/css/style.css" rel="stylesheet" type="text/css" />
<title><?php echo $username; ?></title>
</head>

<body>

<div class="section">
 <div class="main-wrap">
  <h2><?php echo $username; ?></h2>
 </div>
</div>

</body>
</html>
 
Frank Nietbelangrijk

Frank Nietbelangrijk

25/12/2013 23:07:43
Quote Anchor link
Het zou nog zo kunnen zijn dat je een Byte Order Mark (BOM) in je bestanden hebt staan.
Hierdoor zou je eigenlijk een foutmelding moeten krijgen bij session_start(); maar als de error_reporting uit staat dan krijg je die ook niet. Wat je kunt doen is je hele code kopiëren en in een NIEUW bestand plakken en opslaan. Dit doe je dan met een plain text editor zoals notepad.

http://www.w3.org/International/questions/qa-byte-order-mark
Gewijzigd op 25/12/2013 23:08:33 door Frank Nietbelangrijk
 
Ivo P

Ivo P

26/12/2013 12:04:10
Quote Anchor link
even los van de vraag waarom je een sessionsprobleem hebt:
waarom verander je de invoer van de gebruikers?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
$username
= preg_replace('/[^A-Za-z0-9\-]/', '', $_POST['username']);
$username = str_replace(' ', '', $username);
$realname = preg_replace('/[^A-Za-z\-]/', '', $_POST['realname']);
$emailaddress = preg_replace("/[^@.\/\A-Za-z0-9_]/","", $_POST['emailaddress']);
$password = preg_replace('/[^A-Za-z0-9\-]/', '', $_POST['password']);
?>

[/php]

los van dat die str_replace op de username zinloos is, aangezien je 1 regel eerder vanalles incl spaties vervangen hebt door ''.
Jij accepteert dus in een username alleen maar de letters A tm Z (of de kleine versie), cijfers of de -.
Daar is niet echt iets mis mee, maar als iemand als username opgeeft "Jony V", dan haal jij stilzwijgend de spatie eruit en slaat dat op.
Dat betekent dus ook dat jij daar vanaf nu altijd rekening mee moet houden, als je iemand inlogt.
Daarnaast zal ook de username "Jony!!!#$%%V" bezet zijn.

Idem voor je emailadres.
alleen daar accepteer jij geen - in het mail adres. (ik weet nog hoe irritant dat 10 jaar geleden was toen ik me wilde aanmelden bij de KvK en daar ook geen - geaccepteerd werd. En [email protected] zou best een acceptabel adres lijken...
Nog los van de irritatie: als jij de invoer [email protected] opslaat als [email protected], dan kan snapt straks niemand waarom jony geen mail krijgt, tenzij hij ergens zelf de weggevallen - opmerkt.

zie ook http://www.pfz.nl/wiki/invoer-validatie/#regular-expressions-is-het-een-geldig-email-adres

Overigens controleer je nergens of de resulterende danwel de ingevoerd data niet leeg is: "" of " " kan ook ingevoerd zijn....

Password wederom. En dat terwijl het juist aan te raden is om in een password ook "rare" tekens op te nemen.

Vervolgens hash je het password, dus wat daar ook voor raars in zat: dat is nu zeker letters+cijfers.


---
Ik vermoed dat het te maken heeft met het feit dat jij verderop de aangepaste $username en $email onbeveiligd gebruikt:

<?php
$sql
= "SELECT uid FROM users
        WHERE username='$username'
        LIMIT 1"

?>



Dat had natuurlijk kunnen zijn:

<?php
$sql
= "SELECT uid FROM users
        WHERE username='"
. mysql_real_escape_string($username) ."'
        LIMIT 1"

?>



wat een doeltreffender beveiliging is dan gewoon lomp slopen.
(uiteraard ook voor je andere query's)

Op de plek waar je gegevens echo-t, mis jij htmlspecialchars()


<h2><?php echo htmlspecialchars($username); ?></h2>
value="<?php echo htmlspecialchars($emailaddress); ?>" />
  


---
maar waarom je session niet werkt, is me niet duidelijk.
 
Danny A-noniem

Danny A-noniem

30/12/2013 16:11:08
Quote Anchor link
same problem here, echter alleen met ie.
andere browsers lijken gewoon goed te werken..
dus als iemand de oplossing heeft voor ie...
 
Ivo P

Ivo P

30/12/2013 16:16:00
Quote Anchor link
dan zal jouw browser waarschijnlijk geen cookies accepteren.

bij de settings aanpassen dus.
 
Danny A-noniem

Danny A-noniem

30/12/2013 16:17:57
Quote Anchor link
gebruik geen cookies...
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.