[PHP] Sessie verdwijnt na klikken van een link

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

Onderwerpen


Acties:
  • 0 Henk 'm!

  • _Rob
  • Registratie: Januari 2003
  • Laatst online: 22-08 22:03
Ik heb op elke pagina een session_start(); en op de pagina zelf een login included die tevoorschijn komt wanneer de $_SESSION['username'] leeg is. Wanneer ik inlog gaat het goed en wordt de gebruiker herkend. Echter wanneer ik op een link druk op de pagina dan is de sessie direct expired en wordt de $_SESSION['username'] niet meer herkend. Wat zou hiervan de oorzaak zijn? Ik heb gezocht naar expiren van sessies maar was onduidelijk.

Hier is het login script:
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
session_start();

// Declaratie Database connectie
include("_connect.php");

// controleer of pagina correct is aangeroepen.
if (!empty($_POST)) {

    $query = "SELECT userId, username, password, level FROM user WHERE username = '".$_POST['username']."'";
    $result = mysql_query($query) or die("Error: " . mysql_error());

    if(@mysql_num_rows($result) > 0){
        while ($row = mysql_fetch_array($result)){
            // converteer het password naar md5 encryptie
            if (md5($_POST['password']) != $row['password']) {
                echo "<p>Het wachtwoord klopt niet, probeer opnieuw.</p>";
            } else {
                $userId = $row['userId'];
                $username = $row['username'];
                $level = $row['level'];
                // sla deze vervolgens op in een sessie
                $_SESSION['userId'] = $userId;
                $_SESSION['username'] = $username;
                $_SESSION['level'] = $level;
            }
        }
    } else {
        echo "<p>De gebruikersnaam bestaat niet</p>";
    } 
}

// controle of sessionvariable $_SESSION["username"] is gevuld
if (!isset($_SESSION["username"]))  {
?>
    <b>U bent niet ingelogd</b>
    <form name="loginForm" method="post" action="login.php">
        <table border="0" cellpadding="0" cellspacing="0" >
            <tr>
                <td>Username:</td>
                <td><input name="username" type="text" size="10" maxlength="20" ></td>
            </tr>
            <tr>
                <td>Password:</td>
                <td><input name="password" type="password" size="10" maxlength="20" ></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="login" ></td>
            </tr>
        </table>    
    </form>
    <a href="default.php?mod=reg">Nog niet geregistreerd?</a>
  <?php
} else {
echo "U bent ingelogd, ".$_SESSION['username'];
}

Heeft iemand een idee?

Alvast bedankt!

Rob

[edit]
Rar bestand voor de geintresseerde http://demo.wti.nl/rob/pcwijzer.rar

[ Voor 20% gewijzigd door _Rob op 14-04-2004 00:44 ]

Webdeveloping... -counts to 10- Sigh...


Acties:
  • 0 Henk 'm!

  • lzandman
  • Registratie: November 2000
  • Niet online
Blocked je browser misschien de cookies?

What's the speed of Dark?


Acties:
  • 0 Henk 'm!

  • _Rob
  • Registratie: Januari 2003
  • Laatst online: 22-08 22:03
Dat schijnt niet het probleem te zijn. Ook als ik instel dat me browser alle cookies aanneemt dan komt dit nog steeds voor.

Webdeveloping... -counts to 10- Sigh...


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Heb je op meerdere servers getest?

Acties:
  • 0 Henk 'm!

  • _Rob
  • Registratie: Januari 2003
  • Laatst online: 22-08 22:03
Nee, heb ook geen toegang tot andere servers. Kan dit niet lokaal opgelost worden? :x

Webdeveloping... -counts to 10- Sigh...


Acties:
  • 0 Henk 'm!

  • Expander
  • Registratie: Februari 2001
  • Niet online
Staat de tijd op de server en de pc goed?

Expanding the inexpandable


Acties:
  • 0 Henk 'm!

  • _Rob
  • Registratie: Januari 2003
  • Laatst online: 22-08 22:03
woensdag 14 april 0:37. Lijkt me niks mis mee :p

Webdeveloping... -counts to 10- Sigh...


Acties:
  • 0 Henk 'm!

  • SanderTje!
  • Registratie: Januari 2002
  • Niet online
En als je $_SESSION['userId'] etc vervangt door session_register?

[ Voor 82% gewijzigd door SanderTje! op 14-04-2004 00:42 ]

i7 10700, 32GB RAM, RTX 3080


Acties:
  • 0 Henk 'm!

  • _Rob
  • Registratie: Januari 2003
  • Laatst online: 22-08 22:03
Ik heb het even ingepakt en op een (asp! :p) webserver gezet. http://demo.wti.nl/rob/pcwijzer.rar

Webdeveloping... -counts to 10- Sigh...


Acties:
  • 0 Henk 'm!

  • SanderTje!
  • Registratie: Januari 2002
  • Niet online
_Rob schreef op 14 april 2004 @ 00:42:
Ik heb het even ingepakt en op een (asp! :p) webserver gezet. http://demo.wti.nl/rob/pcwijzer.rar
Heb je ook je tabelstructuur in MySQL?

i7 10700, 32GB RAM, RTX 3080


Acties:
  • 0 Henk 'm!

  • LinuX-TUX
  • Registratie: December 2003
  • Laatst online: 17-09 13:27
Misschien een lompe opmerking, maar begin je elke daarop volgende pagina (van die links) wel weer met session_start(); ?

offtopic:
Als het zonder hoort te werken ben ik zeer benieuwd naar de uitkomst van dit hele verhaal


edit:
whoopsie, ik klik altijd op linkies van tweakers.net, lees tweakers.net af en daarna lees ik pas de leuke GOT tech formpjes .... foutje 8)7 (keertje leren om op de F5 key te raggen voordat ik reageer)

[ Voor 35% gewijzigd door LinuX-TUX op 14-04-2004 01:01 ]


Acties:
  • 0 Henk 'm!

  • SanderTje!
  • Registratie: Januari 2002
  • Niet online
LinuX-TUX schreef op 14 april 2004 @ 00:47:
Misschien een lompe opmerking, maar begin je elke daarop volgende pagina (van die links) wel weer met session_start(); ?

offtopic:
Als het zonder hoort te werken ben ik zeer benieuwd naar de uitkomst van dit hele verhaal
De source heeft de TS online gezet en daarin begint elke file met session_start(); idd..

i7 10700, 32GB RAM, RTX 3080


Acties:
  • 0 Henk 'm!

  • _Rob
  • Registratie: Januari 2003
  • Laatst online: 22-08 22:03
overal staat session_start in..

Sql:
SQL:
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
# Host: localhost
# Database: pcwijzer
# Table: 'message'
# 
CREATE TABLE `message` (
  `messageid` int(11) NOT NULL auto_increment,
  `message` text NOT NULL,
  `topicid` int(11) NOT NULL default '0',
  `datum` datetime NOT NULL default '0000-00-00 00:00:00',
  `userId` int(11) NOT NULL default '0',
  PRIMARY KEY  (`messageid`)
) TYPE=MyISAM; 

# Host: localhost
# Database: pcwijzer
# Table: 'topic'
# 
CREATE TABLE `topic` (
  `topicId` int(11) NOT NULL auto_increment,
  `topic` varchar(200) NOT NULL default '',
  `datum` datetime NOT NULL default '0000-00-00 00:00:00',
  `pinned` int(1) NOT NULL default '0',
  `userId` int(11) NOT NULL default '0',
  `level` int(1) NOT NULL default '3',
  PRIMARY KEY  (`topicId`)
) TYPE=MyISAM; 

# Host: localhost
# Database: pcwijzer
# Table: 'user'
# 
CREATE TABLE `user` (
  `userid` int(11) NOT NULL auto_increment,
  `username` varchar(25) NOT NULL default '',
  `password` varchar(50) NOT NULL default '',
  `email` varchar(150) NOT NULL default '',
  `level` int(1) NOT NULL default '2',
  `datum` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`userid`)
) TYPE=MyISAM; 

[ Voor 9% gewijzigd door _Rob op 14-04-2004 00:51 ]

Webdeveloping... -counts to 10- Sigh...


Acties:
  • 0 Henk 'm!

  • LEiPiE
  • Registratie: Juni 2001
  • Laatst online: 20-09 11:03

LEiPiE

... (ing. van weinig woorden)

(jarig!)
niet toevallig over een SSL verbinding? Hebben we hier dagen op vast gezeten, combinatie apache/PHP/SSL (heb ff de specifieke versies niet bij de hand) icm met IE6/winxp en dan dus over ssl een form posten zorgt er voor dat ALLE server variabelen "weg" zijn :( opgelost door dan maar GET te gebruiken, wat altijd goed lijkt te gaan...

[ Voor 13% gewijzigd door LEiPiE op 14-04-2004 00:52 . Reden: nm session_start :) ]

Papa x3, PHP-progger, Citrofiel, import-Tukker, muziekliefhebber


Acties:
  • 0 Henk 'm!

  • _Rob
  • Registratie: Januari 2003
  • Laatst online: 22-08 22:03
Ik run het hier lokaal.. Dan komt dat toch niet aan de orde?

Webdeveloping... -counts to 10- Sigh...


Acties:
  • 0 Henk 'm!

  • SanderTje!
  • Registratie: Januari 2002
  • Niet online
Ik krijg bij register.php ook de error:
Warning: Cannot modify header information - headers already sent by (output started at /home/httpd/vhosts/deltaserv.nl/httpdocs/sander/got/pcwijzer/register.php:36) in /home/httpd/vhosts/deltaserv.nl/httpdocs/sander/got/pcwijzer/register.php on line 42

Een ob_start(); bovenaan elke .php file is dus ook geen overbodige luxe :)

i7 10700, 32GB RAM, RTX 3080


Acties:
  • 0 Henk 'm!

  • LEiPiE
  • Registratie: Juni 2001
  • Laatst online: 20-09 11:03

LEiPiE

... (ing. van weinig woorden)

(jarig!)
_Rob schreef op 14 april 2004 @ 00:53:
Ik run het hier lokaal.. Dan komt dat toch niet aan de orde?
dat weet ik niet, https://localhost is ook behoorlijk lokaal maar zou wel zo'n symptoom opleveren, vandaar (maar moet wel zeggen, is een heel specifiek geval hoor, maar je weet nooit :))

Papa x3, PHP-progger, Citrofiel, import-Tukker, muziekliefhebber


Acties:
  • 0 Henk 'm!

Verwijderd

probeer eens je php.ini te veranderen.

code:
1
2
3
4
5
6
7
8
9
10
; trans sid support is disabled by default.
; Use of trans sid may risk your users security.
; Use this option with caution.
; - User may send URL contains active session ID
;   to other person via. email/irc/etc.
; - URL that contains active session ID may be stored
;   in publically accessible computer.
; - User may access your site with the same session ID
;   always using URL stored in browser's history or bookmarks.
session.use_trans_sid = 1


Kijk dan vooral naar session.use_trans_sid , standaard staat deze op 0 zet deze eens op 1 en herstart apache.

Acties:
  • 0 Henk 'm!

  • _Rob
  • Registratie: Januari 2003
  • Laatst online: 22-08 22:03
-Sander_ schreef op 14 april 2004 @ 00:55:
Ik krijg bij register.php ook de error:
Warning: Cannot modify header information - headers already sent by (output started at /home/httpd/vhosts/deltaserv.nl/httpdocs/sander/got/pcwijzer/register.php:36) in /home/httpd/vhosts/deltaserv.nl/httpdocs/sander/got/pcwijzer/register.php on line 42

Een ob_start(); bovenaan elke .php file is dus ook geen overbodige luxe :)
Dit is me eerste php opdracht :p normaal werk ik met asp. Foutjes zullen regelmatig voorkomen O-)

Webdeveloping... -counts to 10- Sigh...


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Ik zie bovenin default.php al een session_start(), vervolgens include je daarin verschillende bestanden die elk ook weer een session_start() doen; tevens wordt _connect.php op die manier weer meerdere malen geinclude; ik denk dat je je structuur eens wat eenduidiger moet gaan opstellen..

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
De link waar je opklikt, verwijst die naar hetzelfde path als waar het login script staat?

Ik had laatst namelijk een soortgelijk probleem (eigenlijk, iemand anders had het) en toen bleek dat het cookie path iedere keer veranderde. Door deze handmatig in te stellen op de base url werd dit probleem opgelost.

Kijk anders eens met firefox naar de cookie informatie.

Acties:
  • 0 Henk 'm!

  • SanderTje!
  • Registratie: Januari 2002
  • Niet online
Goed, als ik SESSION_REGISTER(); gebruik, dan werkt het wel gewoon :)


fragment uit login.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
            } else {
                $userId = $row['userId'];
                $username = $row['username'];
                $level = $row['level'];
                // sla deze vervolgens op in een sessie
                $_SESSION['userId'] = $userId;
                $_SESSION['username'] = $username;
                $_SESSION['level'] = $level;
                
                $mijnnaam = "Sander";
                session_register("mijnnaam");
                
            }


Zie daar dan dat stukje $mijnnaam.. voeg dat maar is in en zet dan in default.php bij de titel:

code:
1
<title>Pc Wijzer forum - <? echo "Mijn naam: $mijnnaam"; ?></title>


Zo werkt het wel dus.

Bij mij staan de globals inderdaad aan, dus ik hoef $mijnnaam niet aan te passen met $_SESSION etc..

i7 10700, 32GB RAM, RTX 3080


Acties:
  • 0 Henk 'm!

  • _Rob
  • Registratie: Januari 2003
  • Laatst online: 22-08 22:03
Eigenlijk zou je hard een topic moeten coderen met die sql als je namelijk op een link klik dan is die meteen weg. Heb ik mijn links wel goed gecodeerd? Die staan in de message.php nadat je een link klikt is de sessie meteen verdwenen..

btw
session.use_trans_sid deze maakte geen verschil

[ Voor 25% gewijzigd door _Rob op 14-04-2004 01:18 ]

Webdeveloping... -counts to 10- Sigh...


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

-Sander_ schreef op 14 april 2004 @ 01:07:
Goed, als ik SESSION_REGISTER(); gebruik, dan werkt het wel gewoon :)
[...]
Dan zou ik mijn PHP maar eens gaan updaten en register_globals gauw uitzetten ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • SanderTje!
  • Registratie: Januari 2002
  • Niet online
crisp schreef op 14 april 2004 @ 01:36:
[...]

Dan zou ik mijn PHP maar eens gaan updaten en register_globals gauw uitzetten ;)
Dat moet je mijn host vragen :) Ben me btw niet echt bewust van de veiligheid die ik daarmee 'mis', want daar zal het wel om draaien uiteraard..

i7 10700, 32GB RAM, RTX 3080


Acties:
  • 0 Henk 'm!

  • _Rob
  • Registratie: Januari 2003
  • Laatst online: 22-08 22:03
Session_register maakt geen vershil. Als ik op een link klik dan (van message.php) dan is de sessie direct expired en kan ik weer overnieuw inloggen. Iemand nog ideeen?

Webdeveloping... -counts to 10- Sigh...


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Ja, het is een cookie probleem. Je zal toch echt moeten uitzoeken wat er precies in de cookie staat en of het misschien zo is dat er meerdere cookies i.p.v. verzonden worden.
Probeer eens hetvolgende te doen:
PHP:
1
2
3
4
$t = 999999
$path = '/'
session_set_cookie_params($t,$path);
session_start();

En die dat bij elke session start.
Daarnaast moet je er voor zorgen dat php niet automatisch de session start.
Eventueel een session_write_close (indien de sessie toch automatisch gestart wordt) voor bovengenoemde code kan ook al wonderen doen.

Acties:
  • 0 Henk 'm!

  • Hans1990
  • Registratie: Maart 2004
  • Niet online
Misschien is het probleem wel dat je alleen op login.php session_start() hebt staan ? Probeer het in connect.php te zetten. Dat is tenminste een globaal bestand hoop ik.

Ik dacht trouwens dat als je in bestand1.php session_start() doet en in bestand2.php ook en je registreert een sessie in bestand2.php dat die sessie niet in bestand1.php toegangbaar is. Dan zal je het in een globaal bestand moeten zetten..

[ Voor 4% gewijzigd door Hans1990 op 14-04-2004 11:01 ]


Acties:
  • 0 Henk 'm!

  • wens
  • Registratie: Juni 2002
  • Laatst online: 20-09 19:54
Bij ASP kan volgende aan de hand zijn, mogelijk ook bij PHP:

Heeft je server een _ in de naam? Dan kan IE server-side cookies blocken.
http://www.iisfaq.com/default.aspx?View=A508&P=170

[ Voor 23% gewijzigd door wens op 14-04-2004 13:16 ]


Acties:
  • 0 Henk 'm!

  • _Rob
  • Registratie: Januari 2003
  • Laatst online: 22-08 22:03
Hans1990 schreef op 14 april 2004 @ 11:00:
Misschien is het probleem wel dat je alleen op login.php session_start() hebt staan ? Probeer het in connect.php te zetten. Dat is tenminste een globaal bestand hoop ik.

Ik dacht trouwens dat als je in bestand1.php session_start() doet en in bestand2.php ook en je registreert een sessie in bestand2.php dat die sessie niet in bestand1.php toegangbaar is. Dan zal je het in een globaal bestand moeten zetten..
Ik ga jou tip eens proberen! Bedankt!

Webdeveloping... -counts to 10- Sigh...


Acties:
  • 0 Henk 'm!

  • _Rob
  • Registratie: Januari 2003
  • Laatst online: 22-08 22:03
wens schreef op 14 april 2004 @ 13:15:
Bij ASP kan volgende aan de hand zijn, mogelijk ook bij PHP:

Heeft je server een _ in de naam? Dan kan IE server-side cookies blocken.
http://www.iisfaq.com/default.aspx?View=A508&P=170
De servernaam heet roblaptop :p
Tevens lukt het nog steeds niet om succesvol in te loggen. Zou het geweldig vinden als een guru er even naar kon kijken.

Bestand is geupdate http://demo.wti.nl/rob/pcwijzer.rar

Webdeveloping... -counts to 10- Sigh...


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Ik had ook een dergelijk probleem:
[rml][ php] session: blijf niet ingelogd als cookies uit staan[/rml]

helaas wist niemand een oplossing :'(

server is daarna vervangen en nu staat die trans_id op Off, dus logisch dat het niet meer werkt

[ Voor 27% gewijzigd door marty op 15-04-2004 04:46 ]


Acties:
  • 0 Henk 'm!

  • _Rob
  • Registratie: Januari 2003
  • Laatst online: 22-08 22:03
omg...

Ik schaam mij diep (trouwens opmerkelijk dat niemand het is opgevallen :P)
maar de $_SESSION variabelen zijn bij sommige pagina's hetzelfde als normale.


|:( 8)7

[ Voor 6% gewijzigd door _Rob op 15-04-2004 12:44 ]

Webdeveloping... -counts to 10- Sigh...

Pagina: 1