Toon posts:

[PHP] sessies starten en destroyen *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Even een probleem met sessie onder PHP.

Ik wil een secure login maken, heb er al een script voor dat ook werkt.
Maar ik krijg allemaal foutmeldingen van sessies.

Volgensmijn ondersteunt mijn locale Apache server geen sessies of iets dergelijks.

Deze foutmelding[en] krijg ik nl.:

-----------------------------------------------------
Warning: Cannot send session cache limiter - headers already sent (output started at c:\program files\apache group\apache\htdocs\samenstellen\login.php:2) in c:\program files\apache group\apache\htdocs\samenstellen\login.php on line 9

Warning: open(/tmp\sess_e0bd536d5787bd8149eca686fcd1138c, O_RDWR) failed: m (2) in c:\program files\apache group\apache\htdocs\samenstellen\login.php on line 9

Members only. Please login to access this document.

Username:
Password:


Warning: open(/tmp\sess_e0bd536d5787bd8149eca686fcd1138c, O_RDWR) failed: m (2) in c:\program files\apache group\apache\htdocs\samenstellen\login.php on line 0

Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in c:\program files\apache group\apache\htdocs\samenstellen\login.php on line 0
------------------------------------------------------------------------------

en als ik inlog, wat dus wel luk... , krijg ik dezen:

----------------------------------------------------------------------------------


Warning: Cannot send session cookie - headers already sent by (output started at c:\program files\apache group\apache\htdocs\samenstellen\login.php:2) in c:\program files\apache group\apache\htdocs\samenstellen\login.php on line 9

Warning: Cannot send session cache limiter - headers already sent (output started at c:\program files\apache group\apache\htdocs\samenstellen\login.php:2) in c:\program files\apache group\apache\htdocs\samenstellen\login.php on line 9

Warning: open(/tmp\sess_b5165d0e8623e832758744731d5187a5, O_RDWR) failed: m (2) in c:\program files\apache group\apache\htdocs\samenstellen\login.php on line 9

Warning: open(/tmp\sess_b5165d0e8623e832758744731d5187a5, O_RDWR) failed: m (2) in Unknown on line 0

Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0
-----------------------------------------------------------------------------------

Dit is het gebruikte script:

------------------------------------------------------------------------------------


<?php

include("dbconnect.php");

?>

<?
session_start(); // start session.
?>
<!-- header tags, edit to match your own, or include template header file. -->
<html>
<head>
<title>Login</title>
<head>
<body>
<?
if(!isset($username) | !isset($password)) {
// escape from php mode.
?>
<form action="<?=$PHP_SELF?><?if($QUERY_STRING){ echo"?". $QUERY_STRING;}?>" method="POST">
<p align="center">Members only. U moet inloggen voor toegang tot dit document.</p>
<table align="center" border="0">
<tr>
<th>
Username:
</th>
<th>
<input type="text" name="username">
</th>
</tr>
<tr>
<th>
Password:
</th>
<th>
<input type="password" name="password">
</th>
</tr>
<tr>
<th colspan="2" align="right">
<input type="submit" value="Login">
</form>
</th>
</tr>
</table>
</body>
</html>
<?
exit();
}

// If all is well so far.

session_register("username");
session_register("password"); // register username and password as session variables.

// Here you would check the supplied username and password against your database to see if they exist.
// For example, a MySQL Query, your method may differ.

$sql = mysql_query("SELECT password FROM member WHERE username = '$username'");
$fetch_em = mysql_fetch_array($sql);
$numrows = mysql_num_rows($sql);

if($numrows != "0" & $password == $fetch_em["password"]) {
$valid_user = 1;
}
else {
$valid_user = 0;
}

// If the username exists and pass is correct, don't pop up the login code again.
// If info can't be found or verified....

if (!($valid_user))
{
session_unset(); // Unset session variables.
session_destroy(); // End Session we created earlier.
// escape from php mode.
?>
<form action="<?=$PHP_SELF?><?if($QUERY_STRING){ echo"?". $QUERY_STRING;}?>" method="POST">
<p align="center">Incorrecte inlog gegevens, probeer het opnieuw. U moet inloggen om toegang te krijgen tot dit document.</p>
<table align="center" border="0">
<tr>
<th>
Username:
</th>
<th>
<input type="text" name="username">
</th>
</tr>
<tr>
<th>
Password:
</th>
<th>
<input type="password" name="password">
</th>
</tr>
<tr>
<th colspan="2" align="right">
<input type="submit" value="Login">
</form>
</th>
</tr>
</table>
</body>
</html>
<?
exit();
}
?>


---------------------------------------------------------------------------------------

En deze info staat bij sessies als ik gegevens oproep met phpinfo() :


session
Session Support enabled

Directive Local Value Master Value
session.auto_start
Off Off
session.cache_expire
180 180
session.cache_limiter
nocache nocache
session.cookie_domain
no value no value
session.cookie_lifetime
0 0
session.cookie_path
/ /
session.entropy_file
no value no value
session.entropy_length
0 0
session.gc_maxlifetime
1440 1440
session.gc_probability
1 1
session.name
PHPSESSID PHPSESSID
session.referer_check
no value no value
session.save_handler
files files
session.save_path
/tmp /tmp
session.serialize_handler
php php
session.use_cookies
On On

------------------------------------------

De sessies zijn dus wel geenabled.

Hoe kan ik dit probleem oplossen ?

De sessies eruit slopen zou natuurlijk een makkelijke oplossing zijn, maar dat wil ik eigenlijk niet. En ik heb dit probleem al eerder gehad, kon ik de sessies ook niet aan de praat krijgen.

Zeer irritant.

BVD

Jelmer

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

www.php.net/header
ff goed bekijken :)

Doet iets met Cloud (MS/IBM)


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

en ff CODE tags toevoegen.... Het stickie is weg, maar dat betekend niet dat je code daardoor overzichtelijker wordt :)

Verwijderd

of kijk anders hier (werkt overigens voor alle php errors):

http://www.google.nl/sear...nl&btnG=Google+zoeken&lr=


ohja, en zodra je de oplossing hebt gevonden: pas op met lege regels buiten phptags, die zijn ook dodelijk. klinkt misschien vaag maar zodra je weet wat je fout is is het helemaal duidelijk

  • Eskimootje
  • Registratie: Maart 2002
  • Laatst online: 11:59
Je mag geen output naar je de browser hebben voordat je een sessie begint ook geen lege wit-regels oid. Dat heb je wel daarom krijg je een error.

Verwijderd

Ik zal je in het nederlands vertellen hoe het zit (topicstarter)

Voordat je header commando's geeft mag er 0.0 data op het scherm terecht komen oftewel zelfs een spatie kan zorgen dat cookies of verwijzingen (headers) niet werken, dus bekijk je code ff op spaties....

bv

code:
1
2
3
4
5
<?

etc

?>


de spatie voor <? zorgt voor errors... :) speelze

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

En ik zou je session.save_path even aanpassen in je php.ini..

On track


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
meestal helpt het wel om session_start() zo "hoog" mogelijk in je script te zetten, dus nog boven je include("dbconnect.php")

Verwijderd

Topicstarter
heb geprobeerd met header tags, kreeg al veel foutmeldingen weg. Maar niet alles.

Heb nu de sessies uit het script gesloopt, draaie en het werkt alles zonder fouten. Dus waarom zoud ik de sessies wel gebruiken ??? [in dit geval dan]

Uiteraard zal ik het ooit wel nodig hebben. dus ik blijf zoeken en proberen.

In iedergeval bedankt !!!

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
je moet je tmp_dir in php.ini goed instellen, hij kan /tmp niet vinden.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

[nohtml]
Verwijderd schreef op 04 oktober 2002 @ 11:13:
heb geprobeerd met header tags, kreeg al veel foutmeldingen weg. Maar niet alles.
header is geen vervanging voor session...
Heb nu de sessies uit het script gesloopt, draaie en het werkt alles zonder fouten. Dus waarom zoud ik de sessies wel gebruiken ??? [in dit geval dan]

Uiteraard zal ik het ooit wel nodig hebben. dus ik blijf zoeken en proberen.
Je gebruikt sessies omdat je de functionaliteit ervan nodig hebt, toch :? Als je ze niet nodig hebt moet je ze niet gebruiken natuurlijk...

Maar wat er met header bedoelt werd is dat session_start ook headers stuurt en dat er bij de header functie uitgelegd wordt waarom het bij jou fout ging...

Verwijderd

Gewoon de map c:\tmp aanmaken

Verwijderd

FF een beetje offtopic; als je ob_start(); zou gebruiken, waardoor je header problemen voorkomt, heeft dat gevolgen voor de performance?
Ik kan me herinneren uit mijn zwarte ASP periode dat reponse.buffer = true (de manier om daar de buffers aan te zetten, en header problemen te voorkomen) nogal slecht is voor de performance van je sait.
En sessies in het algemeen? Bij ASP probeerde ik het zoveel mogelijk te voorkomen, omdat het sessie-object in ASP niet echt zuinig is met resources (niet te spreken over de oplossingen die je moet verzinnen bij geclusterde servers). Hoe zit dat met PHP? Ik heb nog steeds de neiging om sessies te voorkomen, maar als het niet echt veel performance verslechtering oplevert ga ik fijn es wat objecten geserialized in sessies proppen :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Tuurlijk heeft dat gevolgen voor de performance, hoeveel weet ik niet. Zal wel niet vreselijk veel zijn, maar elke vorm van buffering op deze manier heeft denk ik negatieve gevolgen voor je performance.

Er zal niet vreselijk veel performance verslechtering door sessies zijn denk ik zo.
Serializen is het enige slome eraan ;) Let er wel op dat je bij serialization de resource-id's wel kwijt bent, tenminste... Een resource id blijft wel bestaan maar het wijst niet meer naar de bijbehorende sql-connectie enzo :)

Verwijderd

Voor XML gerelateerde bezigheden is zoiets eigelijk ideaal.. Als je je XML uit de database heb gehaald, en er allemaal spannende dingetjes mee gedaan hebt, dan stop ik het altijd in een XML-object, die daar weer allemaal spannende dingetjes kan doen. Als ik dat object geserialized in een sessie zou proppen heb ik gedurende de sessie alle XML beschikbaar, zonder queries te hoeven doen. Ff uitwerken.. moet kunnen :)

[ Voor 0% gewijzigd door Verwijderd op 07-10-2002 18:29 . Reden: mun smiley deed het niet! ]


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Je kunt ook van je sessie een ietswat overdreven grote multi-dimensional Array maken bijvoorbeeld. Beter in performance dan serialisation van een XML-object lijkt me, al wel minder overzichtelijk.

Mocht je sessie-variabelen willen verwijderen, let dan op dat in < 4.2.1 (geloof ik :?) unset($_SESSION['var']) niet werkt zoals het zou moeten. Het unset de variabele alleen voor die pagina.

Wat wel werkt op eerdere versies is

$_SESSION['var'] = null

(er even vanuit gaande dat je het bestaan van een sessie-variabele checkt middels isset(), wat wel zo handig is in de meeste gevallen.)

  • Jermaine
  • Registratie: Januari 2003
  • Laatst online: 06-08 11:59
Hello, ff oude koetjes uit het slootje halen :)... Met de map /tmp/ aanmaken is gelukkig ook hier een groot deel opgelost, alleen het volgende niet; als ik met m'n scriptje weer uit wil loggen, krijg ik de volgende error;

Warning: Session object destruction failed in C:\webserver\www\loguit.php on line 3

Warning: Cannot add header information - headers already sent by (output started at c:\webserver\www\loguit.php:3) in c:\webserver\www\loguit.php on line 5

Mijn PHP scriptje ziet er zo uit;
code:
1
2
3
4
5
<?
session_start();
session_destroy();
header("Location: index.php");
?>


Het draait allemaal op Apache met PHP op een Windows XP bakje, maar is er iemand die weet hoe ik dit oplos? 8)7

[ Voor 4% gewijzigd door Jermaine op 31-07-2003 12:32 ]


  • samo
  • Registratie: Juni 2003
  • Laatst online: 21-08 13:14

samo

yo/wassup

dit heeft bij mij altijd wel gewerkt...
Genoil schreef op 04 October 2002 @ 10:55:
meestal helpt het wel om session_start() zo "hoog" mogelijk in je script te zetten, dus nog boven je include("dbconnect.php")

Bekend van cmns.nl | ArneCoomans.nl | Het kindertehuis van mijn pa in Ghana


  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
De PHP manual geeft de volgende voorbeelden:

Example 684. Destroying a session
PHP:
1
2
3
4
5
6
7
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();
// Unset all of the session variables.
session_unset();
// Finally, destroy the session.
session_destroy();


Example 685. Destroying a session with $_SESSION
PHP:
1
2
3
4
5
6
7
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();
// Unset all of the session variables.
$_SESSION = array();
// Finally, destroy the session.
session_destroy();


Wellicht een van deze voorbeelden proberen?

It’s nice to be important but it’s more important to be nice


  • Jermaine
  • Registratie: Januari 2003
  • Laatst online: 06-08 11:59
loguit.php is niets meer en niets minder dan

code:
1
2
3
4
5
<?
session_start();
session_destroy();
header("Location: index.php");
?>


En 'session_start();' staat in mijn ogen daar toch écht bovenaan :)

  • Jermaine
  • Registratie: Januari 2003
  • Laatst online: 06-08 11:59
Hij blijft wazig lullen over;

Warning: Session object destruction failed in c:\webserver\www\loguit.php on line 8, JonkieXL :'(

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Example 684. Destroying a session
Puur toeval natuurlijk :D

Professionele website nodig?


  • Jermaine
  • Registratie: Januari 2003
  • Laatst online: 06-08 11:59
:D

  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
In jouw voorbeeld unset je de session variabelen nog steeds niet. Weet niet of dat de oorzaak is van je probleem, maar het is toch wel netjes omdat wel te doen.

Zoeken naar de foutmelding met Google doet ook wonderen.

Bij het 2e search result kom je onder andere de volgende workaround tegen.
PHP:
1
2
unlink(session_save_path().'/sess_'.$PHPSESSID); 
setcookie('PHPSESSID','',time()-3600,'/');


Echter we missen nog steeds belangrijke informatie, zoals:
1. Welke PHP versie draai je?
2. Maak je gebruik van de superglobal $_SESSION of van register_globals?

It’s nice to be important but it’s more important to be nice


  • Jermaine
  • Registratie: Januari 2003
  • Laatst online: 06-08 11:59
1) PHP Versie 4.0.3 (Op WinXP dus)
2) register_globals

  • Jermaine
  • Registratie: Januari 2003
  • Laatst online: 06-08 11:59
Zo te zien is het gelukt met;

PHP:
1
2
3
4
<?
unlink(session_save_path().'/sess_'.$PHPSESSID); 
setcookie('PHPSESSID','',time()-3600,'/');
?>


Ontzettend bedankt :D
Pagina: 1