Waarom werk setcookie() niet??

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mark ter Luun

Mark ter Luun

01/12/2010 01:23:16
Quote Anchor link
Ik heb een functie geschreven die kan worden aangeroepen om een user in te loggen. Echter, als ik setcookie() gebruik, werkt het gewoon niet. De user id (uid) wordt niet in een cookie opgeslagen. Als ik naar een andere pagina ga met header() en de uid in de URL zet zodat die op te halen is als een $_GET variabele, en op die pagina setcookie() gebruik, werkt het wel. Dit is echter niet echt mooi en niet de oplossing die ik zoek. Hieronder de functie:

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
// Log a user on
function login($connection, $uid, $pwd, $remember=FALSE, $closeConnection=FALSE) {
    // Take some security measures
    $pwd = md5($pwd);

    // Get the userdata
    $user = finduser($connection, $uid);
    if ($user == NULL) {
        if ($closeConnection) {
            mysql_close($connection);
        }
        return FALSE;
    }

    // Match the password
    if ($pwd == $user['pwd']) { // The password matches
        if ($remember) {
            setcookie('uid', $uid, time()+(60*60*24*30)); // Remember the uid for 30 days
        }
        if ($closeConnection) {
            mysql_close($connection);
        }
        return TRUE;
    } else { // The password does not match
        $_SESSION['notification'] = "The password is incorrect.";
        if ($closeConnection) {
            mysql_close($connection);
        }
        return FALSE;
    }
}


Ik hoop dat iemand begrijpt waarom het niet werkt en mij kan vertellen hoe ik het wel kan laten werken. Bij voorbaat dank.

Mvg,
Mark
Graag in het vervolg bij code, [code] [/code] tags gebruiken. [/modedit]
Gewijzigd op 02/12/2010 19:00:06 door Bas IJzelendoorn
 
PHP hulp

PHP hulp

19/04/2024 19:37:24
 
Tim Kampherbeek

Tim Kampherbeek

01/12/2010 01:25:28
Quote Anchor link
ob_start()?
 
TJVB tvb

TJVB tvb

01/12/2010 09:35:29
Quote Anchor link
@Tim
ob_start == evil

@Mark, begin eens met onderstaande code boven aan je scipt. En gebruik $_COOKIE i.p.v. setcookie
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
?>
 
Kris Peeters

Kris Peeters

01/12/2010 10:09:07
Quote Anchor link
We zouden moeten zien hoe je de functie aanroept en wat je er mee doet.
Na het zetten van de cookies, kan je best, bv. met header('location ...') de boel verversen.
 
Mark ter Luun

Mark ter Luun

01/12/2010 13:55:52
Quote Anchor link
@TJVB, de code die je schreef doet niets. Geen enkele output... Ik neem aan dat ik een foutmelding te zien zou moeten krijgen als er een fout in mn code zit?
Het gebruiken van $_COOKIE ipv setcookie() gaat niet lukken omdat $_COOKIE variabelen alleen tijdens de sessie blijven bestaan (blijkbaar), heb het net geprobeerd. Met setcookie() zou de cookie moeten blijven staan voor 30 dagen... Toch?

Kan het trouwens komen doordat het php bestand die setcookie() aanroept in een subdirectory staat van de map met het php bestand die de cookie probeert op te halen?
 
Kris Peeters

Kris Peeters

01/12/2010 14:40:20
Quote Anchor link
Toon eens hoe je de functie aanroept (en wat code er voor en er na).
 
Mark ter Luun

Mark ter Luun

01/12/2010 14:40:50
Quote Anchor link
Heb ook al het volgende geprobeerd om de cookie in alle directories beschikbaar te maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
setcookie('uid', $uid, time()+(60*60*24*30), '/', $_SERVER['HTTP_HOST']); // Remember the uid for 30 days


Werkt ook niet.

Toevoeging op 01/12/2010 14:46:40:

@Kris, de onderstaande code is een deel van login.php, de login functie zoals hierboven beschreven staat in users.php. Deze 2 php bestanden staan in de /system directory. De scripts die de cookie proberen op te halen staan in de root.

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
$user['uid'] = $_POST['uid'];
$user['pwd'] = $_POST['pwd'];

// Connect to the MySql server
require_once '../settings/mysql.php';
$connection = mysql_connect($settings['mysql']['address'], $settings['mysql']['uid'], $settings['mysql']['pwd']);

// Log the user on
include 'users.php';
if (login($connection, $user['uid'], $user['pwd'], $_POST['remember_uid'], TRUE)) {
    header("location: ../dashboard.php?uid=". urlencode($user['uid']));
    exit;
} else {
    header("location: ../index.php?notification=". $_SESSION['notification']);
    exit;
}


Graag in het vervolg bij code, [code] [/code] tags gebruiken. [/modedit]
Gewijzigd op 02/12/2010 19:00:43 door Bas IJzelendoorn
 
Kris Peeters

Kris Peeters

01/12/2010 15:26:17
Quote Anchor link
Kijk, ik heb even je code wat aangepast zodat de essentie overblijft, maar ik geen mySQL nodig heb.
Dit werkt stand alone

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
<?php
// Log a user on
function login($connection, $uid, $pwd, $remember=FALSE, $closeConnection=FALSE) {
  // Take some security measures
  $pwd = md5($pwd);

  // Get the userdata
  $user = finduser($connection, $uid);
  if ($user == NULL) {
    if ($closeConnection) {
      mysql_close($connection);
    }

      return FALSE;
  }

  // Match the password
  if ($pwd == $user['pwd']) { // The password matches
    if ($remember) {
      setcookie('uid', $uid, time()+(60*60*24*30)); // Remember the uid for 30 days
    }
    if ($closeConnection) {
      mysql_close($connection);
    }

    return TRUE;
  }
else { // The password does not match
    $_SESSION['notification'] = "The password is incorrect.";
    if ($closeConnection) {
      mysql_close($connection);
    }

    return FALSE;
  }
}

function
finduser($connection, $uid) {
  // hier even zonder mysql
  $users = array(
    0 => array(
      'pwd' => md5('pass0')
    ),

    1 => array(
      'pwd' => md5('pass1')
    ),

    2 => array(
      'pwd' => md5('pass2')
    ),
  );

  return $users[$uid];
}



if (!empty($_POST)) {
    $user['uid'] = $_POST['uid'];
    $user['pwd'] = $_POST['pwd'];

    // Connect to the MySql server
    // require_once '../settings/mysql.php';
    // $connection = mysql_connect($settings['mysql']['address'], $settings['mysql']['uid'], $settings['mysql']['pwd']);

    $connection = null;

    // Log the user on
    // include 'users.php';

    if (login($connection, $user['uid'], $user['pwd'], $_POST['remember_uid'], false)) {
      header("location: ?uid=". urlencode($user['uid']));
      exit;
    }
else {
      header("location: ?notification=". $_SESSION['notification']);
      exit;
    }  
}

else {
  echo '
  <form method="post" action="">
   <input name="uid" /> uid
   <input name="pwd" /> pwd
   <input type="checkbox" name="remember_uid" /> remember
   <input type="submit" value="OK">
  </form>
  Je kan inloggen met
  <table>
    <tr><th>uid</th><th>pass</th></tr>
    <tr><td>0</td><td>pass0</td></tr>
    <tr><td>1</td><td>pass1</td></tr>
    <tr><td>2</td><td>pass2</td></tr>
  </table>
  '
;
}

?>


Bij mij wordt de cookie wel bijgehouden.
 
Mark ter Luun

Mark ter Luun

02/12/2010 18:20:27
Quote Anchor link
Bij mij werkt het nog steeds niet
 



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.