Sessie na inloggen weg

Status
Niet open voor verdere reacties.

Tha Devil

Moderator
Forumleiding
Moderator
Lid geworden
1 sep 2002
Berichten
16.494
Besturingssysteem
macOS Sequoia
Ik zit met een probleem aangaande een sessie:

Ik heb eerst local zitten testen met php v.4.2.3 en daarbij ging alles goed.

Nu heb ik het geupload naar een internetwebserver(phpinfo: Apache Version Apache/1.3.33 (Unix) mod_ssl/2.8.22 OpenSSL/0.9.7d PHP/4.3.10 mod_perl/1.29 FrontPage/5.0.2.2510) en daar gaat het mis:

Ik log in en normaal wordt dan mijn inlognaam opgeslagen in $_SESSION['member'] en dan aan de hand daarvan wordt er een query gemaakt die voor de rechten zorgt waar degene mag komen.

Als ik daarna naar bijvoorbeeld Edit Profile ga en dan weer naar de index krijg ik een error waaruit blijkt dat mijn sessie alweer is afgelopen terwijl ik nog niet eens op uitloggen heb gedrukt:confused: :
Warning: extract(): First argument should be an array in /usr/home/hq7891/domains/gtp-community.com/public_html/admin.php on line 1064

Waarbij hij verwijst naar deze regel:
PHP:
 $query = "SELECT * FROM members WHERE nickname='$_SESSION[member]'";
        $result = mysql_query($query) or die(mysql_errno() . ": " . mysql_error());
        $row = mysql_fetch_array($result);
        extract ($row);

Mijn vraag is hoe het kan dat hij het bij mijn eigen server wel doet maar bij die andere niet? Ik zou toch graag de boel netjes af willen leveren...:confused:
 
Check met mysql_num_rows() eens hoeveel rijen hij uit die tabel ophaalt, zowel lokaal als online.
 
Ik heb de regel:
PHP:
        $query = "SELECT * FROM members WHERE nickname='$_SESSION[member]'";
        $result = mysql_query($query) or die(mysql_errno() . ": " . mysql_error());
        $row = mysql_fetch_array($result);
        extract($row);
veranderd in:
PHP:
        $query = "SELECT * FROM members WHERE nickname='$_SESSION[member]'";
        $result = mysql_query($query) or die(mysql_errno() . ": " . mysql_error());
        $row = mysql_num_rows($result);
        echo"$row";

En hij geeft zowel online een 1 weer als local... Betekent dit dat hij maar 1 rij uit de database haalt?Of moet ik de regel wijzigen?:o

[edit]
Ik krijg nu alleen de optie "Edit Profile" te zien omdat deze sowiezo beschikbaar is en aangezien hij geen rechten checked krijg ik de rest dus niet te zien. Maar als ik online het profiel wijzig en hij gaat weer naar de index (admin.php) dan staat er een 0 ipv een 1. En op local blijft er dan een 1 staan.
 
Laatst bewerkt:
Is er niet een mogelijkheid om met cookies te werken? Ik weet wel hoe je die kunt maken, maar aangezien ik in het bestand al uitvoer geeft voordat hij inlogt kan hij dus geen cookies maken want dan krijg ik " Header already sent ..."

Zou jij voor mij na willen kijken hoe ik dat moet gaan doen en waar ik wat neer moet zetten. :o

[bijlage is begin van het betreffende script]
 

Bijlagen

als je problemen met "Headers already sent" kun je dat oplossen met bufferen.

ob_start(); voordat je html output gaat genereren en ob_end_flush(); erna. PHP zal dan alle output bufferen en eerst het hele PHP doc parsen en eventuele headers kunnen dan nog gewijzigt worden omdat er nog geen headers zijn verzonden want die zitten in de buffer. Indien een header veranderd en de gebufferde info is niet meer nodig dan wordt die info gedumpt.

Voorbeeldje:

<?php
ob_start();
?>
<html>
<head>
<?php
if($bogus) header("Location: bogus.php");
?>


En dan helemaal aan het einde van de output generatie:

<?php
ob_end_flush();
?>

Je ziet hier dat er html headers worden verzonden maar dat php daarna een header commando te verwerken kan krijgen, zonder ob gaat dit mis. Nu niet.

ob staat trouwens voor Output Buffering en het END commando maar eenmalig gebruiken op het moment dat je zeker weet dat de headers geen problemen meer kunnen krijgen. ob_start() echter kun je per doc. meerdere malen aanroepen als er code komt dat output genereerd.

Succes
 
Laatst bewerkt:
Thanx het is me gelukt :D:thumb:
 
Da's niet zozeer een oplossing, meer een ranzig omzeilingstrucje.
 
Als jij me verteld hoe het op een "correcte" manier kan...
 
Eerst alle PHP codes uitvoeren, dan pas output genereren :)

Persoonlijk doe ik dit door mijn PHP code en HTML code in aparte bestanden te plaatsen. De PHP code wordt eerst uitgevoerd, daarna de HTML code.

Als je 't op die manier doet, zul je nooit last krijgen van de 'headers already sent' melding :)
Die melding treed namelijk op als je headers naar de browser van de bezoeker probeert te sturen nadat je al HTML code hebt geoutput. Dat kan niet.
 
Nou het is mijn bedoeling om dus alles in 1 bestand te maken (makkelijker voor iemand anders te verplaatsen) en wat voor schade kan ob_flush() nou aanrichten?

Het gaat mij voornamelijk erom dat ik die cookies krijg, en dat is nu gelukt.
 
Geplaatst door Tha Devil
Nou het is mijn bedoeling om dus alles in 1 bestand te maken (makkelijker voor iemand anders te verplaatsen)
Begrijpelijk, dan zou ik in het eerste deel van het bestand PHP code zetten, daaronder HTML code.
en wat voor schade kan ob_flush() nou aanrichten?
Hangt ervanaf hoe groot de output is, hoe groot de load op de server is en hoeveel geheugen de server heeft.
*denkt aan geheugen overload*
Het gaat mij voornamelijk erom dat ik die cookies krijg, en dat is nu gelukt.
Uiteraard, functionaliteit is 't belangrijkste :)
Maar netheid, onderhoudbaarheid en performance is ook belangrijk ;)
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan