Więc, najpierw screeny, w czym problem:
Próba logowania:
http://img236.imageshack.us/img236/8959/1xf5.jpg
Zalogowany. Start sesji.
http://img234.imageshack.us/img234/1731/2pr6.jpg
Komunikat, o nie posiadaniu postaci [sesja wciąż działa]:
http://img70.imageshack.us/img70/9849/3be9.jpg
plik CRT_CHAR.php. Sesja zmieniła swoją wartość [ z "maestros" na "0" ]
http://img247.imageshack.us/img247/7872/4ud4.jpg
Oto skrypty.
Log.php
session_start();
require_once('config.php');
$db = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($dbase, $db);
?>
CIAłO DOKUMENTU
<form action="lognow.php" method="POST">
Podaj swój login:<BR>
<input type="text" name="user">
<BR><BR>
Podaj swoje hasło:<BR>
<input type="text" name="password">
<BR><BR>
<input type="submit" value="Zaloguj się">
</form>
Lognow.php
session_start();
require_once('config.php');
$db = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($dbase, $db);
?>
CIAłO DOKUMENTU
<?
$_SESSION['user'] = $_POST['user'];
$password = $_POST['password'];
if (!$password || !$_SESSION['user'] || strlen($password)>30 || strlen($_SESSION['user'])>30)
{
echo '<B>Wystapił bład podczas logowania:</b><br>
1. Pole hasła lub loginu nie zostało wypełnione poprawnie<br>
2. Pole hasła lub loginu przekroczyło maksymalna dlugosc 30-stu znaków<br>
<br>
<a href="javascript:history.back(-1)">Wróć</a> i popraw błędy';
unset($_SESSION['user']);
}
else
{
$get = mysql_query("select * from users where login='" . $_SESSION['user'] . "' and password='" . $password . "'");
$amount = mysql_num_rows($get);
if ($amount>0)
{
echo 'Witamy spowrotem, <b>' . $_SESSION['user'] . '</b>!<br>
<a href="usercp.php">Kliknij tutaj, aby przejsc do panelu użytkownika</a>';
session_register($_SESSION['user']);
}
else
{
echo '<b>Nie ma takiego użytkownika w naszej bazie danych.</b><br><a href="javascript:history.back(-1)">Wróć</a>, i popraw bład';
unset($_SESSION['user']);
}
}
?>
Plik usercp.php. Tutaj, sesja nadal działa:
<?
session_start();
require_once('config.php');
$db = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($dbase, $db);
?>
CIAłO DOKUMENTU
<?
if (!isset($_SESSION['user']))
{
echo '<b>Brak dostępu!</b>';
}
else
{
$user = mysql_query("select * from users where login='" . $_SESSION['user'] . "'");
$show = mysql_fetch_assoc($user);
if ($show['character_name'] == "")
{
echo '
<font color="green">[SYSTEM]</font> Nadaj imię swojej <a href="crt_char.php">postaci</a>.';
}
else
{
echo
'
<b>Nick postaci:</b> ' . $show['character_name'] . '<br>
<b>Profesja:</b> ' . $show['sex'] . ' ' . $show['job'] . '<br>
<b>Poziom:</b> ' . $show['level'] . ' (' . $show['experience'] . ')<br>
<b>Atak:</b> ' . $show['attack'] . '<br>
<b>Obrona:</b> ' . $show['defense'] . '<Br>
<b>Siła magiczna:</b> ' . $show['matt'] . '<br>
<Br>
<b>Gildia:</b> ' . $show['guild_name'] . ' [' . $show['guild_rank'] . ']<br>
';
}
}
?>
Plik kluczowy, w którym sesja zmienia wartość:
session_start();
require_once('config.php');
$db = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($dbase, $db);
?>
CIAłO DOKUMENTU
<?
if (!isset($_SESSION['user']))
{
echo '<b>Brak dostępu</b>';
}
else
{
echo '
<form action="accept.php" method="POST">
Podaj nick swojej postaci:<BR>
<input type="text" name="char">
<BR><BR>
<input type="submit" value="Dodaj postac">';
}
?>
W pliku crt_char.php sesja po prostu się "wyłącza" / "zmienia wartość" z np. "UŻYTKOWNIK" na "0".
Dlaczego tak się dzieje?
Na swoim napisanym własnoręcznie forum, (bez szablonu) taki błąd nie występował. W swoim serwisie, również opartym na sesjach, zawierającym aż 60 plików z sesjami taki błąd również nie występował.
Jaka może być przyczyna tego błędu?