Problem z sesjami

Odpowiedz Nowy wątek
2007-01-04 10:46
Morpheusz
0

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?

Pozostało 580 znaków

2007-01-04 15:29
0
  1. co to jest plik kluczowy, crt_char ?
  2. włącz raportowanie błędów na maxa to może czegoś się dowiesz
  3. "z powrotem" się pisze tak jak właśnie napisałem
  4. nie używaj session_register, a już na pewno nie w taki sposób
  5. sprawdź koniecznie czy błąd ten występuje w każdej przeglądarce
  6. problem tkwi dalej, obstawiałbym dalszą część crt_char lub miejsce gdzie wyświetla się prawa część, text "Podaj nick swojej postaci" jednak się pojawia czyli sesja została wyczytana

w każdym razie miejsca w którym występuje błąd raczej nie podałeś (chyba że ostatni skrypt naprawdę nie ma tagu zaczynającego)


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2007-01-04 15:39
Morpheusz
0

Plik kluczowy - nazwalem go ta, bo to w nim cos sie dzieje z sesjami

wlaczalem raportowanie - i nic :/

Nie ma dalszych plikow... są tylko te...

PS: o jaka prawą część Ci chodzi?

Pozostało 580 znaków

2007-01-04 15:41
Morpheusz
0

Byłbym zapomniał... to jak zarejestrowac sesje, jak nie przez session_register() ?

Pozostało 580 znaków

2007-01-04 15:48
nav
2007-01-04 16:37
0

po prostu nie używaj
a więcej plików na pewno jest bo chociażby jest odwołanie do config.php ;P
przydałaby się reszta pliku ostatniego i prawa część = menu gdzie jest np panel
powstawiaj najlepiej w parę miejsc echo $_SESSION['user'] i w końcu dojdziesz co, gdzie i dlaczego się dzieje

BTW za bardzo polegasz na magic quotes


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2007-01-04 16:50
Morpheusz
0

@nav
dziwne, bo jakos takim samym sposobem jakim pisze obecny skrypt zrobilem swoje forum - o dziwno dziala...

@adamo
w config.php są ustawienia MySQL, usera, hosta i hasła ; )

Pozostało 580 znaków

2007-01-04 16:55
Morpheusz
0

@Adamo

Proszę - zapomniałem

<table border=0 width=100% cellpadding=3 cellspacing=0>
<tr>
<td class="head2"><? echo 'Witaj <b>' . $_SESSION['user'] . '</b>! '; ?><BR><font size="1">(<a href="index.php?p=logout">Wyloguj się</a>)</td>
</tr>
<tr>
<td class="content" align=center>

<a href="index.php?p=usercp">Panel główny</a><br>
<a href="index.php?p=inventory">Ekwipunek</a><br>
<a href="index.php?p=quests">Dziennik misji</a><br>
<a href="index.php?p=personal_status">Osobowość</a><br>
<a href="index.php?p=stats">Statystyki</a><br>

</td>
</tr>
<tr>
<td class="bottom">
&nbsp;
</td>
</tr>
</table>
<br>

<table border=0 width=100% cellpadding=3 cellspacing=0>
<tr>
<td class="head2">Arena walki</td>
</tr>
<tr>
<td class="content" align=center>

<a href="index.php?p=fight">Walcz z potworami</a><br>
<a href="index.php?p=pvp">Wyzwij przeciwnika</a><br>
<a href="index.php?p=watch">Ogladaj walki</a><br>
<a href="index.php?p=pvp_stats">Statystyki PvP</a><br>

</td>
</tr>
<tr>
<td class="bottom">
&nbsp;
</td>
</tr>
</table>
<br>

<table border=0 width=100% cellpadding=3 cellspacing=0>
<tr>
<td class="head2">Mapa swiata</td>
</tr>
<tr>
<td class="content" align=center>
<a href="index.php?p=shops">Sklepy</a><br>
<a href="index.php?p=market">Market</a><br>
<a href="index.php?p=genesis">Amabayr Genesis</a><br>
<a href="index.php?p=przedmioty">Przedmioty</a><br>
<a href="index.php?p=potwory">Potwory</a><br>
<a href="index.php?p=spells">Czary i skille</a><br>
<a href="index.php?p=forum">Forum</a><br>
<a href="index.php?p=sbox">Shoutbox</a><br>
</td>
</tr>
<tr>
<td class="bottom">
&nbsp;
</td>
</tr>
</table>
<br>

<table border=0 width=100% cellpadding=3 cellspacing=0>
<tr>
<td class="head2">Nowosci</td>
</tr>
<tr>
<td class="content" align=center>
<br>
<script>
function show(id) 
{ 
return document.getElementById(id); 
}
setTimeout(function(){show('kontener').innerHTML='<center><img src="new/1.gif" title="Swirling Amulet">';}, 1000);
setTimeout(function(){show('kontener').innerHTML='<center><img src="new/1.gif" title="Swirling Amulet"> <img src="new/2.gif">';}, 2000);
setTimeout(function(){show('kontener').innerHTML='<center><img src="new/1.gif" title="Swirling Amulet"> <img src="new/2.gif"> <img src="new/3.gif">';}, 3000);
setTimeout(function(){show('kontener').innerHTML='<center><img src="new/1.gif" title="Swirling Amulet"> <img src="new/2.gif" title="Griffith Boots"> <img src="new/3.gif" title="Copper Ring"> <img src="new/4.gif" title="[Special] Silver Chest">';}, 4000);
show('kontener');

</script>

<div id="kontener"></div>

<br>
</td>
</tr>
<tr>
<td class="bottom">
&nbsp;
</td>
</tr>
</table>
<br>

</span>

Pozostało 580 znaków

2007-01-04 18:15
0

dobra, już chyba widzę błąd
naprawdę pomoże wyrzucenie linijki session_register


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2007-01-04 19:25
Morpheusz
0

Wyrzuciłem ją... sesja dalej przybiera postać "0", zamiast przypisanej wczesniej wartości....

Pozostało 580 znaków

2007-01-04 20:45
0

no to w takim razie musiałbyś dać całe te pliczki gotowe do przetestowania błędu u siebie


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 0, botów: 1

Robot: Bingbot