[PHP] session enkel gekend binnen 1 pagina

Pagina: 1
Acties:
  • 146 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
het volgende probleem doet zich voor

een user wordt ingelogd, een sessie aangemaakt en zijn usernaam wordt in de sessie opgenomen
als dit gebeurd is wordt hij geredirect naar een andere pagina, het eerste wat hier staat, na de dbconnectie is het opvragen van de ssie, maar de usernaam staat er niet meer in, how come? een sessie is normaal toch overal gekend niet?

Acties:
  • 0 Henk 'm!

  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 26-04-2024
Hoe stop je de username in de sessie :?

Zie ook: P&W FAQ - PHP

[ Voor 49% gewijzigd door ludo op 23-04-2004 10:49 ]


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Euhm, wel session_start() boven iedere pagina? En hetzelfde domein?

edit: en bestaat de username in de sessie wel op de pagina waarvan geredirect wordt?

[ Voor 40% gewijzigd door r0bert op 23-04-2004 10:49 ]


Acties:
  • 0 Henk 'm!

  • mindcrash
  • Registratie: April 2002
  • Laatst online: 22-11-2019

mindcrash

Rebellious Monkey

Verwijderd schreef op 23 april 2004 @ 10:46:
het volgende probleem doet zich voor

een user wordt ingelogd, een sessie aangemaakt en zijn usernaam wordt in de sessie opgenomen
als dit gebeurd is wordt hij geredirect naar een andere pagina, het eerste wat hier staat, na de dbconnectie is het opvragen van de ssie, maar de usernaam staat er niet meer in, how come? een sessie is normaal toch overal gekend niet?
Dat ligt eraan hoe je de sessie functionaliteit in php gebruikt... PHP vindt het bijvoorbeeld niet leuk als je de session_* functies en de _SESSION[] door elkaar heen gebruikt. Zie ook de FAQ

Daarnaast geldt een sessie voor één domein, dus als je van domein verwisselt (van subdomein naar subdomein geloof ik ook, maar weet ik niet zeker want ik programmeer al een flinke tijd niet meer in PHP) raak je ook je gegevens kwijt.

[ Voor 14% gewijzigd door mindcrash op 23-04-2004 10:56 ]

"The people who are crazy enough to think they could change the world, are the ones who do." -- Steve Jobs (1955-2011) , Aaron Swartz (1986-2013)


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ludo schreef op 23 april 2004 @ 10:48:
Hoe stop je de username in de sessie :?
Dit is het loginscherm :
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
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
require 'db_connect.php';

if($logged_in == 1) {
    die('You are already logged in, '.$_SESSION['username'].'.');

}


?>
<html>
<head>
<title>Login</title>
</head>
<body>
<?php

if (isset($_POST['submit'])) { // if form has been submitted


    /* check they filled in what they were supposed to and authenticate */
    if(!$_POST['uname'] | !$_POST['passwd']) {
        die('You did not fill in a required field.');
    }

    // authenticate.

    if (!get_magic_quotes_gpc()) {
        $_POST['uname'] = addslashes($_POST['uname']);
    }

    $check = $db_object->query("SELECT username, password FROM users WHERE username = '".$_POST['uname']."'");

    if (DB::isError($check)) {
        die('That username does not exist in our database.');
    }

    $info = $check->fetchRow();

    // check passwords match

    $_POST['passwd'] = stripslashes($_POST['passwd']);
    $info['password'] = stripslashes($info['password']);
    $_POST['passwd'] = md5($_POST['passwd']);

    if ($_POST['passwd'] != $info['password']) {
        die('Incorrect password, please try again.');
    }

    // if we get here username and password are correct, 
    //register session variables and set last login time.

    $date = date('m d, Y');

    $update_login = $db_object->query("UPDATE users SET last_login = '$date' WHERE username = '".$_POST['uname']."'");

    $_POST['uname'] = stripslashes($_POST['uname']);
    $_SESSION['username'] = $_POST['uname'];
    $_SESSION['password'] = $_POST['passwd'];
    $db_object->disconnect();
    //redirect naar user area

    //header('Location: example.php');
?>

<h1>Logged in</h1>
<p>Welcome back <?php echo $_SESSION['username']; ?>, you are logged in.</p>

<?php
} else {    // if form hasn't been submitted

?>
<h1>Login</h1>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
<table align="center" border="1" cellspacing="0" cellpadding="3">
<tr><td>Username:</td><td>
<input type="text" name="uname" maxlength="40">
</td></tr>
<tr><td>Password:</td><td>
<input type="password" name="passwd" maxlength="50">
</td></tr>
<tr><td colspan="2" align="right">
<input type="submit" name="submit" value="Login">
</td></tr>
</table>
</form>
<?php
}
?>
</body>
</html>


Dit is db_connect :
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
39
40
41
42
43
<?php

//require the PEAR::DB classes.

require_once 'DB.php';


$db_engine = 'mysql';
$db_user = '***;
$db_pass = '***';
$db_host = 'localhost';
$db_name = '***';

$datasource = $db_engine.'://'.
              $db_user.':'.
              $db_pass.'@'.
              $db_host.'/'.
              $db_name;


$db_object = DB::connect($datasource, TRUE);

/* assign database object in $db_object, 

if the connection fails $db_object will contain

the error message. */

// If $db_object contains an error:

// error and exit.

if(DB::isError($db_object)) {
    die($db_object->getMessage());
}

$db_object->setFetchMode(DB_FETCHMODE_ASSOC);

// we write this later on, ignore for now.

include('check_login.php');

?>


Dit is check_login :
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php

/* check login script, included in db_connect.php. */

session_start();

if (!isset($_SESSION['username']) || !isset($_SESSION['password'])) {
    $logged_in = 0;
    return;
} else {
    
    // remember, $_SESSION['password'] will be encrypted.

    if(!get_magic_quotes_gpc()) {
        $_SESSION['username'] = addslashes($_SESSION['username']);
    }


    // addslashes to session username before using in a query.
    $pass = $db_object->query("SELECT password FROM users WHERE username = '".$_SESSION['username']."'");

    if(DB::isError($pass)) {
        $logged_in = 0;
        unset($_SESSION['username']);
        unset($_SESSION['password']);
        // kill incorrect session variables.
    }

    $db_pass = $pass->fetchRow();

    // now we have encrypted pass from DB in 
    //$db_pass['password'], stripslashes() just incase:

    $db_pass['password'] = stripslashes($db_pass['password']);
    $_SESSION['password'] = stripslashes($_SESSION['password']);



    //compare:



    if($_SESSION['password'] == $db_pass['password']) { 
        // valid password for username
        $logged_in = 1; // they have correct info
                    // in session variables.
    } else {
        $logged_in = 0;
        unset($_SESSION['username']);
        unset($_SESSION['password']);
        // kill incorrect session variables.
    }
}


// clean up
unset($db_pass['password']);

$_SESSION['username'] = stripslashes($_SESSION['username']);

?>


dit is de pagina waarnaar je geredirect word :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

require 'db_connect.php';

// require our database connection
// which also contains the check_login.php
// script. We have $logged_in for use.
?>



<?php
if ($logged_in == 0) {
    die('Sorry you are not logged in, this area is restricted to registered members. <a href="login.php">Click here</a> to log in.');
}


// show content

$db_object->disconnect();
// when you are done.

?>


Met de database connectie enzo is niets mis, maar met de sessie hapert er echt wel iest

Acties:
  • 0 Henk 'm!

  • mindcrash
  • Registratie: April 2002
  • Laatst online: 22-11-2019

mindcrash

Rebellious Monkey

Die session_start() doet het m... die helpt je zeer waarschijnlijk je _SESSION array om zeep. :)

"The people who are crazy enough to think they could change the world, are the ones who do." -- Steve Jobs (1955-2011) , Aaron Swartz (1986-2013)


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

mindcrash schreef op 23 april 2004 @ 10:58:
[...]


Die session_start() doet het m... die helpt je zeer waarschijnlijk je _SESSION array om zeep. :)
Nee hoor... Hij heeft gewoon geen session_start() op de pagina waarnaar je geredirect wordt... Althans, ik zie hem niet. :P

Session_start() heb je bij mijn weten ook i.c.m. $_SESSION nodig. Ik gebruik ze iig altijd samen, en heb nooit problemen.

[ Voor 7% gewijzigd door NMe op 23-04-2004 11:02 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

mindcrash schreef op 23 april 2004 @ 10:58:
[...]


Die session_start() doet het m... die helpt je zeer waarschijnlijk je _SESSION array om zeep. :)
Dat is ook mijn gedacht. Je moet enkel een sessie starten als je de eerste keer op de pagina komt. Telkens je session_start() opvraagt, wordt de 'oude' sessie tenietgedaan.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 23 april 2004 @ 11:04:
[...]

Dat is ook mijn gedacht. Je moet enkel een sessie starten als je de eerste keer op de pagina komt. Telkens je session_start() opvraagt, wordt de 'oude' sessie tenietgedaan.
dus als ik het goed begrijp moet ik die session_start() enkel doen de eerste maal dat ik inlog? en daarna nergens meer, want de sessie bestaat dan al?

Acties:
  • 0 Henk 'm!

  • LinuX-TUX
  • Registratie: December 2003
  • Laatst online: 17-09 13:27
@ hierboven: Sessies moet je telkens weer starten op elke verse pagina, om door te kunnen gaan met die waardes die je daar hebt gedeclareerd.

Verder zie ik nergens: session_register(); naar voren komen :? zo kan je toch ook niet goed sessie variabeles declareren?

Sessie mag dan wel bestaan, maar stel het maar voor als een serverside-cookie, cookies moet je ook telkens weer opnieuw aanvragen op een andere pagina wil je er waardes uit hebben.

AH, op die fiets
/me LinuX-TUX wrijft even zijn slaapballen uit z'n ogen .... tja tis nog vroeg en de zon is ook oogverblindend 8)

[ Voor 35% gewijzigd door LinuX-TUX op 23-04-2004 11:15 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
LinuX-TUX schreef op 23 april 2004 @ 11:10:
@ hierboven: Sessies moet je telkens weer starten op elke verse pagina, om door te kunnen gaan met die waardes die je daar hebt gedeclareerd.

Verder zie ik nergens: session_register(); naar voren komen :? zo kan je toch ook niet goed sessie variabeles declareren?
Use of session_register() is deprecated, vandaar dus

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 23 april 2004 @ 11:04:
[...]

Dat is ook mijn gedacht. Je moet enkel een sessie starten als je de eerste keer op de pagina komt. Telkens je session_start() opvraagt, wordt de 'oude' sessie tenietgedaan.
dacht ut niet :)

kwootje van php.net:
session_start() creates a session or resumes the current one based on the current session id that's being passed via a request, such as GET, POST, or a cookie.
Ikzelf gebruik ook altijd session_start() boven elke pagina met $_SESSION[], en dat werkt altijd prima.

//offtopic:
ik zie veel reacties waarvan ik me afvraag of de poster uberhaupt php.net/session_start wel eens gelezen heeft.

[ Voor 14% gewijzigd door Verwijderd op 23-04-2004 11:13 ]


Acties:
  • 0 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

session_start() meot je boven elke pagina zetten waar je gebruik wilt maken van sessies of als je een bestaande sessie wil door laten lopen. session_start() helpt niet $_SESSION overhoop als je hem slechts 1 keer boven elke pagina zet.

Meer info (oftewel manual-werk):
http://nl2.php.net/session_start

@LinuX-TUX: vanaf PHP 4.1.0 wordt het gebruik van session_register al afgeraden en het gebruik van $_SESSION geprefereerd, zie ook de PHP-FAQ van P&W.

offtopic:
damn.. ik ben traag vandaag

[ Voor 27% gewijzigd door MatHack op 23-04-2004 11:17 ]

There's no place like 127.0.0.1


Acties:
  • 0 Henk 'm!

  • mindcrash
  • Registratie: April 2002
  • Laatst online: 22-11-2019

mindcrash

Rebellious Monkey

LinuX-TUX schreef op 23 april 2004 @ 11:10:
Verder zie ik nergens: session_register(); naar voren komen :? zo kan je toch ook niet goed sessie variabeles declareren?
_SESSION en session_register mag je niet door elkaar gebruiken. Nouja mag wel, maar dan gaat je sessie stuff niet werken :)

Het probleem van de TS is (zie ik nu - het is nog ochtend dus tja :p ) dat hij op een bepaalde pagina session_start() is vergeten en wel _SESSION gebruikt. Welke dat is mag hij zelf uitzoeken lijkt mij - daar leert hij alleen maar van en daarnaast heb ik een erg subtiele hint in deze post gegeven denk ik ;)

[ Voor 5% gewijzigd door mindcrash op 23-04-2004 11:18 ]

"The people who are crazy enough to think they could change the world, are the ones who do." -- Steve Jobs (1955-2011) , Aaron Swartz (1986-2013)


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
mindcrash schreef op 23 april 2004 @ 11:16:
[...]


_SESSION en session_register mag je niet door elkaar gebruiken. Nouja mag wel, maar dan gaat je sessie stuff niet werken :)

Het probleem van de TS is (zie ik nu - het is nog ochtend dus tja :p ) dat hij op een bepaalde pagina session_start() is vergeten en wel _SESSION gebruikt. Welke dat is mag hij zelf uitzoeken lijkt mij - daar leert hij alleen maar van en daarnaast heb ik een erg subtiele hint in deze post gegeven denk ik ;)
I know in de login.php maar, als ik daar session_start() toevoeg werkt het nog steeds hetzelfde als tevoren.
Mijn vraag is nu of session_start() in alle paginas moet staan die doorlopen worden tussen login.php en de redirction pagina? dir zijn er 3 db_connect,check_login en db.php(maar deze is require once)

edit:
*nee dus
want ik heb het gebrobeerd en maakt nog steeds niets uit
ik heb alle suggesties geprobeerd en niets werkt
het is dus nog steeds zoals in het begin, mja toch wel een beetje meer fouten uitgesloten

[ Voor 13% gewijzigd door Verwijderd op 23-04-2004 11:40 ]


Acties:
  • 0 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Je moet boven elke pagina van je site in principe session_start invoeren, ben je het ergens vergeten en je gaat er heen, en je wil daarna weer naar een pagina die de sessies gebruikt, dan ben je de sessie verloren en wordt er dus een nieuwe aangemaakt.

There's no place like 127.0.0.1


Acties:
  • 0 Henk 'm!

  • sjoerdb2
  • Registratie: Juli 2001
  • Laatst online: 09-05 09:52
als je nou op elke pagina iets van auth.php oid include, die een sessie start en checkt of je bent ingelogd, zo niet dan header ("login.php"); exit; en anders gewoon doorloopt.

Dan heb je dus op elke pagina een session_start();
Pagina: 1