Fout met Sessions
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)
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
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());
}
-------------------------------------------------------------------------------------------------------------------------------
$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());
}
-------------------------------------------------------------------------------------------------------------------------------
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 -
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
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()
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.
- SanThe - op 14/04/2011 12:16:54:
Ik ook niet.
En het gebruik van vier verschillende databases lijkt mij ook nergens voor nodig.
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
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
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
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
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
En ook helemaal geen errors meer terwijl Error Reporting aan staat =D
Dankjewel!!!
Gewijzigd op 15/04/2011 10:33:06 door John D
Na 1 uur ofzo, of wat het beste is
Gewijzigd op 15/04/2011 10:46:16 door Justin van den hoek
Code (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
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>
/* 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
Kan ik ook gewoon bij Logout.php session destroy doen ofzo ??
Gewijzigd op 15/04/2011 11:00:21 door John D
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)
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
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>
/* 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)
'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.
In mijn code is het opruimen slechts bijzaak bij het tonen van online website kijkers.
you're welcome ;-)
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)
1
2
3
4
5
6
7
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);
?>
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:
.