Fout met Sessions

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Justin van den hoek

Justin van den hoek

14/04/2011 11:08:08
Quote Anchor link
Goedendag allemaal,

Ik heb sinds kort een website gedownload en deze opgezet, nu zit ik alleen met de volgende fouten :S

Deze 4 fouten:
-------------------------------------------------------------------------------------------------------------------------------
Warning: session_start() [function.session-start]: open(..\Server\tmp\sess_a37d669f0f24106191f594838f7a3636, O_RDWR) failed: No such file or directory (2) in ***\_Server\Server\htdocs\configs.php on line 4

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at ***\_Server\Server\htdocs\configs.php:4) in ***\_Server\Server\htdocs\configs.php on line 4

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at ***\_Server\Server\htdocs\configs.php:4) in ***\_Server\Server\htdocs\configs.php on line 4

Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent in ***\_Server\Server\htdocs\configs.php on line 10
-------------------------------------------------------------------------------------------------------------------------------
In configs.php word de volgende code verwerkt.
Ik zet hem voor de zekerheid er volledig in:
-------------------------------------------------------------------------------------------------------------------------------
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
<?php
$sessionid
= session_id();
if($sessionid == ""){
session_start();
}


$sessionid = session_id();
if ($sessionid == '') session_start();
if (!isset($_SESSION['safety'])){
session_regenerate_id(true);
$_SESSION['safety'] = true;
}

$_SESSION['sessionid'] = session_id();

$serveraddress = "localhost"; // Your mysql server address
$serveruser = "root"; // Your mysql user
$serverpass = "ascent"; //Your mysql password

$server_db = "forum"; //Your website database
$server_adb = "auth"; //Your account database
$server_cdb = "characters"; //Your characters database
$server_wdb = "world"; //Your world database

$website['title'] = "even weggehaald";
$website['address'] = "http://wow.demonworld.nl"; // 'http://url/foldername/' or 'http://url/'
$website['root'] = "/"; // '/' <- for root and '/foldername/' <- for any folder
//Initialize Lang Files

include("lang/eng.php");

$connection_setup = mysql_connect($serveraddress,$serveruser,$serverpass)or die(mysql_error());
mysql_select_db($server_db,$connection_setup)or die(mysql_error());

if($_SESSION['username'] != ""){
mysql_select_db($server_adb,$connection_setup)or die(mysql_error());
$username = mysql_real_escape_string($_SESSION['username']);
$lbrspa = mysql_query("SELECT * FROM account WHERE username = '".$username."'");
$account_information = mysql_fetch_assoc($lbrspa);
mysql_select_db($server_db,$connection_setup)or die(mysql_error());
}
-------------------------------------------------------------------------------------------------------------------------------
 
PHP hulp

PHP hulp

20/04/2024 06:51:32
 
Arjan -

Arjan -

14/04/2011 11:52:29
Quote Anchor link
Toevallig geen spatie(s) voor de openingstag van php?

En waarom zo moeilijk doen. Zet gewoon session_start() bovenaan en laat dat session_id() gebeuren achterwege. $_SESSION kan je ook controleren, zonder zo omslachtig te hoeven doen.

Bekijk deze ook maar ff: http://www.pfz.nl/forum/topic/1979-php-session-id/
Gewijzigd op 14/04/2011 11:59:40 door Arjan -
 
Gerhard l

gerhard l

14/04/2011 12:02:31
Quote Anchor link
voordat je je session id kan controleren moet je wel session starten, dus zet sowieso bovenaan session_start();

No such file or directory error betekend dat hij de opgegeven map niet kan vinden controleer het path

gebruik geen or die, bouw foutafhandeling in.

(het is ook handig om je inloggegevens even uit je script te halen....)
Gewijzigd op 14/04/2011 12:04:58 door gerhard l
 
Arjan -

Arjan -

14/04/2011 12:10:38
Quote Anchor link
Gerhard l op 14/04/2011 12:02:31:
voordat je je session id kan controleren moet je wel session starten, dus zet sowieso bovenaan session_start();


Dit is dus niet het geval, zie: http://nl3.php.net/session_id

Maar buiten dat zie ik het nut niet echt van het gebruik van session_id()
 
- SanThe -

- SanThe -

14/04/2011 12:16:54
Quote Anchor link
Arjan - op 14/04/2011 12:10:38:
Maar buiten dat zie ik het nut niet echt van het gebruik van session_id()


Ik ook niet.
En het gebruik van vier verschillende databases lijkt mij ook nergens voor nodig.
 
Arjan -

Arjan -

14/04/2011 12:18:18
Quote Anchor link
- SanThe - op 14/04/2011 12:16:54:
Arjan - op 14/04/2011 12:10:38:
Maar buiten dat zie ik het nut niet echt van het gebruik van session_id()


Ik ook niet.
En het gebruik van vier verschillende databases lijkt mij ook nergens voor nodig.


Dat had ik nog geen eens opgemerkt, maar volgens mij bevat elke database één tabel in plaats van één database met alle tabellen :s
 
Justin van den hoek

Justin van den hoek

14/04/2011 13:24:14
Quote Anchor link
Het gaat hier om een World Of Warcraft database, maar die 4 databases zitten in 1 grote database. Die 4 databases(tables) werken allemaal samen met de Auth.

Dus eigelijk kan je die andere 3 vergeten.
Maar ik kom er niet uit want hij blijft zeuren met die errors :S

En die session heeft te maken met inloggen/uitloggen enzo, heb ik het vermoeden
Gewijzigd op 14/04/2011 13:24:58 door Justin van den hoek
 
John D

John D

14/04/2011 13:52:36
Quote Anchor link
Apache mag kennelijk het session file niet schrijven:
open(..\Server\tmp\sess_a37d669f0f24106191f594838f7a3636, O_RDWR) failed
los dat eerst op. Je kan desnoods een eigen session file map maken onder je DocumentRoot.
Vervolgens definieeer je die als eerste regel voorafgaand aan session_start()
Gewijzigd op 14/04/2011 13:55:54 door John D
 
Justin van den hoek

Justin van den hoek

15/04/2011 10:11:57
Quote Anchor link
ik vraag me af, want hij wil het volgende bestand lezen.
sess_a37d669f0f24106191f594838f7a3636, O_RDWR

maar als ik nou die ,O_RDWR uit de lijn sloop, ziet hij het goede bestand.

En John zoals jij het uitlegd, hoe moet ik dat definieren? want ik snap echt bijna niks van PHP op het moment :S
 
John D

John D

15/04/2011 10:20:01
Quote Anchor link
Maak onder je DocumentRoot (waar je index.html staat) een directory phpsessions aan, chmod deze desnoods even naar 666 en doe het dan als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
session_save_path('phpsessions');
session_start();
?>

Je kan dit definitief gebruiken maar in ieder geval om te testen. Er is misschien een reden waarom je niet in /tmp mag schrijven.
Gewijzigd op 15/04/2011 10:29:26 door John D
 
Justin van den hoek

Justin van den hoek

15/04/2011 10:27:27
Quote Anchor link
ik heb deze toegepast en alles werkt!!!
En ook helemaal geen errors meer terwijl Error Reporting aan staat =D

Dankjewel!!!
 
John D

John D

15/04/2011 10:31:26
Quote Anchor link
Je moet nu wel even in de gaten houden of de directory phpsessions misschien volloopt met session files. Ik weet niet of apache dit opruimt. Op de default locatie wordt het namelijk wel standaard steeds opgeruimd. Begrijp ook niet helemaal de default ../Server/tmp/ bij jou.
Gewijzigd op 15/04/2011 10:33:06 door John D
 
Justin van den hoek

Justin van den hoek

15/04/2011 10:43:30
Quote Anchor link
kan ik er ook nog iets bij plaatsen dat het opgeruimd word??
Na 1 uur ofzo, of wat het beste is
Gewijzigd op 15/04/2011 10:46:16 door Justin van den hoek
 
John D

John D

15/04/2011 10:46:58
Quote Anchor link
Ik heb dit ooit ergens ingezet. Je moet het zelf ergens integreren maar het werkt meteen al. unlink() gooit oude bestanden weg.
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
<?php
/* Start the session */
session_save_path('phpsessions');
session_start();
$_SESSION["viewer"] = $_SERVER["REMOTE_ADDR"];
/* Define how long the maximum amount of time the session can be inactive. */
define("MAX_IDLE_TIME", 2);

function
getOnlineUsers(){

if ( $directory_handle = opendir( session_save_path() ) )
{

  $count = 0;
  while ( false !== ( $file = readdir( $directory_handle ) ) )
  {

    if($file != "." && $file != "..")
    {

      if(time()- fileatime(session_save_path() . "/" . $file) < MAX_IDLE_TIME * 60)
      {

        $count++;
      }

      else //remove files with PHP - Unlink()
      {
        unlink(session_save_path() . "/" . $file);
      }
    }
  }

  closedir($directory_handle);
  return $count;

}

else
{
return false;
}
}


// echo "Website bezoekers online: " . getOnlineUsers() . "<br />";

?>


<html>
<head>
<style type="text/css">
<!-- BODY {background:none transparent;}-->
</style>
</head>
 <body>
  <font face="trebuchet ms" size="2" color="black">
   <b>
   Website bezoekers online: <?echo getOnlineUsers(); ?>
   </b>
  </font>
 </body>
</html>
Gewijzigd op 15/04/2011 10:51:32 door John D
 
Justin van den hoek

Justin van den hoek

15/04/2011 10:52:41
Quote Anchor link
even een vraagje tussendoor.

Kan ik ook gewoon bij Logout.php session destroy doen ofzo ??
 
John D

John D

15/04/2011 10:56:25
Quote Anchor link
Misschien, ik weet niet of het session file bij destroy opgeruimd wordt. Kwestie van testen maar dan heb je nog geen garantie dat alles opgeruimd wordt. Niet iedereen log netjes uit. Je kan ook op zoek gaan waarom dedefault lokatie niet werkt nu je weet dat je php code opzich wel goed werkt. Er is dus een lokatie waar de session files standaard geschreven worden en die door apache wordt opgeruimd. Bij mij is dat: /var/lib/php/session maar bij jou iets met ../Server/tmp. Misschien moet je die directory wel aanmaken??
Gewijzigd op 15/04/2011 11:00:21 door John D
 
Ozzie PHP

Ozzie PHP

15/04/2011 11:13:08
Quote Anchor link
John D op 15/04/2011 10:46:58:
Ik heb dit ooit ergens ingezet. Je moet het zelf ergens integreren maar het werkt meteen al. unlink() gooit oude bestanden weg.
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
<?php
/* Start the session */
session_save_path('phpsessions');
session_start();
$_SESSION["viewer"] = $_SERVER["REMOTE_ADDR"];
/* Define how long the maximum amount of time the session can be inactive. */
define("MAX_IDLE_TIME", 2);

function
getOnlineUsers(){

if ( $directory_handle = opendir( session_save_path() ) )
{

  $count = 0;
  while ( false !== ( $file = readdir( $directory_handle ) ) )
  {

    if($file != "." && $file != "..")
    {

      if(time()- fileatime(session_save_path() . "/" . $file) < MAX_IDLE_TIME * 60)
      {

        $count++;
      }

      else //remove files with PHP - Unlink()
      {
        unlink(session_save_path() . "/" . $file);
      }
    }
  }

  closedir($directory_handle);
  return $count;

}

else
{
return false;
}
}


// echo "Website bezoekers online: " . getOnlineUsers() . "<br />";

?>


<html>
<head>
<style type="text/css">
<!-- BODY {background:none transparent;}-->
</style>
</head>
 <body>
  <font face="trebuchet ms" size="2" color="black">
   <b>
   Website bezoekers online: <?echo getOnlineUsers(); ?>
   </b>
  </font>
 </body>
</html>

probeer in plaats van de bovenstaande code dit eens:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
ini_set('session.save_path', 'phpsessions');
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);
ini_set('session.gc_maxlifetime', 7200);
?>


'phpsessions' op regel 1 verwijst naar het pad waar de sessiebestanden staan. Die 7200 op regel 3 is het aantal seconden (in dit geval dus 2 uur) dat de sessie geldig blijft. Met bovengenoemde code worden je sessiebestanden ook keurig opgeruimd.
 
John D

John D

15/04/2011 11:18:02
Quote Anchor link
@Ozzie: dank, meteen bewaard voor hergebruik!!
In mijn code is het opruimen slechts bijzaak bij het tonen van online website kijkers.
 
Ozzie PHP

Ozzie PHP

15/04/2011 11:22:07
Quote Anchor link
you're welcome ;-)
 
Justin van den hoek

Justin van den hoek

15/04/2011 11:25:21
Quote Anchor link
Ozzie de Directory bestaat, maar op een of andere manier zoekt hij naar "Session_(cijfers), O_RDWR" terwijl hij maar "Session_(cijfers)" aanmaakt, oftewel hij ziet m dan niet xD

maar ik ga die code proberen, en dan hoop ik dat het goed is.

Nogmaals bedankt!!

Toevoeging op 15/04/2011 11:28:45:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
session_start();
ini_set('session.save_path', 'phpsessions');
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);
ini_set('session.gc_maxlifetime', 7200);
?>


zo moet het nu dus??

Toevoeging op 15/04/2011 14:36:51:

.
 



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.