Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Poprawnosc skryptu a wylogowywanie
Forum PHP.pl > Forum > Gotowe rozwiązania
Robert
Witam...
Wiec chcial bym przedstawic skrypt do sprawdzenia i zweryfikowania jego poprwnosci. [php:1:65ebba2d2d]<table width=320 height=0 cellspacing=1 cellpadding=1>
<tr>
<td>nick</td>
<td>mail</td>
<td>poziom</td>
</tr>
<?
$dir = "includes/users"; // sciezka gdzie znajduja sie users
$dp = opendir($dir);
while($users = readdir($dp)) {
$users = str_replace(".dat", "", $users);
$users = str_replace(".", "", $users);

if ($users) {
include("includes/users/$users.dat");
echo " <tr>
<td>$log</td>
<td><a href='mailto:$mail'>$mail</a></td>
<td>$lev</td>
</tr>";
}
}
closedir($dp);
?>
</table>
[/php:1:65ebba2d2d]

Jak widac skrypt ten pobiera pliki z danego folderu. W folderze pliki wygladaja tak $login.dat gdzie $login to imie danego, zarejestrowanego uzytkownika. Potem pobieram tylko potrzebne mi zmienne z pliku $login.dat(np Robert.dat, Miko.dat) i wrzucam je do tabeli. I z tym wszytko jest ok, lecz jezeli bedac wlasnie na stronie gdzie znajduje sie ten skrypt i podejme jaka kolwiek akcje, zostaje natychmiast automatycznie przelogowany do ostatniego uzytkownika z listy. I tak jest w kolko.
Logowanie mam na sesjach tak dla sprostowania.
Mogl by ktos pomoc rozwiklac mi moj problem. Domyslalm sie ze moglem nie sprecyzowac tego ladnie , lecz sie staralem winksmiley.jpg

Za jaka kolwiek pomoc bede bardzo wdzieczny. Z tym kodem morduje sie od kilku ladnych dni i nie moge sobie za zadne skarby z nim poradzic

Pozdrawiam
KaMeLeOn
Co to znaczy?
Cytat
[...] i podejme jakakolwiek akcje, [...]

Jaką akcję?
Robert
Tzn gdy klikne w jaki kolwiek link lub cos w tym stylu....by mnie przeprowadzilo do innej strony. Wystarczy ze likne w jaki kolwiek link i zostaje automatycznie przelogowany.
spenalzo
Nadal nie rozumiem co ma ten skrypt robić. Bo ten co przedstawiłeś to on wypisuje i dołącza wszystkie pliki z katalogu.
Robert
Dokladnie. Tak jak myslisz ma wypisywac pliki bym mogl pobierac potem z nich zmienne lecz jak juz pisalem z tego skryptu zostaje ciagle wylogowany.....i Tu jest moj problem. Nie wiem jak soobie poradzic z tym by mnie nie wylogowywal do ostatniego uzytkowanika z listy.
spenalzo
Może jestem zmęczony, ale nadal nie rozumiem: gdzie się logujesz itd.
Robert
Wiec tak zaczne mniej wiecej od samego poczatku winksmiley.jpg
Na stronie zrobilem logowanie. Osoby zalogowane maja rozne prawa. Sa admini i goscie. Jak zaloguje sie jako admin pojawia mi sie dodatkowo link do Panelu admina. W nim mam zarzadzanie newsami, aktualizacjami oraz "uzytkownikami". Skrypt ktory podalem jest wlasnie do zarzadzania uzytkownikami, czyli wyswietla mi wszystkich userow znajdujacych sie w katalogu users. Kazdy uzytkownik jak juz wspomnialem ma prawa $lev skrypt ten wyswietla mi levele oraz maile userow. Dzieki temu skryptowi po malej modernizacji bede chcail dodacedycje poziomow. Poruszajac sie po panelu wszytko jest ok. Wejde w zarzadzanie newsami i jest ok nie wylogowywuje mnie. Wejde w aktualizacje takze nie zostaje wylogowany. Lecz gdy wejde w zarzadzanie userami to jest ok do momentu. Wyswietla mi wszytko lecz gdy chce powrocic do panelu glownego admina. Zamast pozostac przy loginie admina zostaje przelogowany do ostatniego usera z listy w panelu do zarzadzania userami.

Jezeli trzeba wiecej szczegolow chcetnie odpowiem winksmiley.jpg
KaMeLeOn
Domyślam się, że odpalasz zmienną sesyjną funkcją session_register()... Poczytaj o tablicy $_SESSION.
Najprawdopodobniej wypisując tabele nadpisujesz tę zmienną i dlatego po przejściu przez pętlę ustawiany jest ostatni user...
Robert
Przeczytalem o $_SESSION i pozmienialem session_register(). Lecz i tak nie wiem gdzie szukac bledu. On moze byc wszedzie. Tak w ogole sprawdzilem czy naprade jest tak jak mowie mianowicie usunalem powyzszy skrypt zostal tylko do zliczania plikow i jest ok nie wylogowywuje mnie, wiec moge powiedziec ze wina obarczaam ten skrypt za wylogowywanie biggrin.gif. Moze ktos ma inna koncepcje na skrypt tego typu.
spenalzo
Jeżeli masz wersję php poniżej 4.1 to musisz dać $HTTP_SESSION_VARS zamiast $_SESSION.
Aha, a dałeś session_start()?
Robert
wersja 4.3.1 i session_start() dalem
spenalzo
A dałeś [manual:0d06df988d]session_start[/manual:0d06df988d] w każdym pliku?
Robert
Upss.....mozliwe ze ze dw moglem pominac...musze sprawdzic...
Robert
Dalej jednak to samo....
spenalzo
Hmm, podaj jeszcze skrypt którm się logujesz.
Robert
[php:1:676c0bcd5d]<?php
if(!empty($_POST)) {
if(file_exists('includes/users/'.$_POST['login'].'.dat')) {
include('includes/users/'.$_POST['login'].'.dat');
if(isset($log) && isset($pass)) {
if($log == $_POST['login']) {
if($pass == $_POST['password']) {
session_start();
session_register('log');
session_register('pass');
header('location: index.php?page=download&'.SID);
exit();
} else {
echo 'Nieprawidlowe haslo!'; }
}
}
}
}

?>
<? if(!empty($_SESSION["log"])){
echo "<table height='68' width='100%' cellpadding='0' cellspacing='0'><tr><td><table width='100%' cellpadding='1' cellspacing='0' style='border-top:1px solid #000000; border-bottom:1px solid #000000'><tr><td align='right' bgcolor='#666666'><font color='#222222'>Witaj <b>".$_SESSION["log"]."</font>&nbsp;</td></tr></table></td></tr><tr><td><table height=100% width='100%' cellpadding='2' cellspacing='0'><tr><td align='center'><font color='#999999'>Jestes zalogowany</font></td></tr><tr><td align='right'>&raquo; <a href='index.php?page=logout' class='admin'>wyloguj</a>&nbsp;</td></tr></table></td></tr></table>";
} else {?>
<table width="100%" cellpadding="1" cellspacing="0"><FORM method="POST" action="<?php echo $PHP_SELF?>">
<tr>
<td colspan="2" height="6"></td>
</tr>
<tr>
<td>&nbsp;Login:</td><td><INPUT type='text' class='login' name='login'></td>
</tr>
<tr>
<td>&nbsp;Haslo:</td><td><INPUT type="password" class="login" name="password"> <INPUT type="submit" value="ok"></td></tr>
<tr><td colspan='2'>&nbsp;&raquo; <a href='index.php?page=lost_pass'>Zapomnialem haslo</a></td></tr>
</FORM></table>
<? } ?>
[/php:1:676c0bcd5d]
spenalzo
Po prostu jak się logujesz zapisujesz zmieną log, która jest później nadpisywana przez zmienne z plików. Są dwa rozwiązania:
1. zmień w swoim logowaniu nazwy zmiennych na inne,
2. przy sprawdzaniu swojej zmiennej $log odwołuj się przez $_SESSION["log"].
Robert
Hmm......zrobilem taki krok........
podczas logowania rejestuje teraz wszystkie zmienne z pliku i uzywam do nich $_SESSION[] lecz dalej nic.....czy moze robie blad ze rejestruje wszystkie zmienne z pliku. Powinienem rejestrowac tylko zmienna log i pass questionmark.gif
Bo juz sam nie wiem smile.gif
Prosil bym o jaka kolwiek pomoc...
?
Cytat
A dałeś session_start w każdym pliku?


niewiem może sie myle ale nie trzeba dawać w kazdym pliku .. [manual:25336770a3]session_start[/manual:25336770a3] ale nie wiem ....

jak trzeba to sory za wprowadzanie w bląd
spenalzo
Funkcja musi być. Chyba że w pliku konfiguracyjnym jest ustawiona na 1 dyrektywa session.auto_start - o ile sie nie mylę.
Robert
session_start wszedzie mam
?
session.auto_start na 1 musi być . tu się z Tobą zgadzam

Ale wystarczy jednen raz : [manual:f55d75ba43]session_start[/manual:f55d75ba43]
możę umieść [manual:f55d75ba43]session_start
[/manual:f55d75ba43] na samym początku strony .. moze to coś da
spenalzo
Cytat
możę umieść [manual:4e64da7533]session_start
[/manual:4e64da7533] na samym początku strony .. moze to coś da

session_start umieszcza się tylko na początku strony - jeżeli zapisuje dane w ciastkach, a tak przeważnie jest.
?
ja inaczej nie twierdze ale jeżeli jest już na początku po co dawać na innych stronach , ok koniec tematu ..
smile.gif Post jest poświęcony innemu tematowi
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.