Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][sesje] równoległe sesje
Forum PHP.pl > Forum > PHP
tomq
Witam,

Czy jest możliwość korzystania z dwóch lub więcej sesji równocześnie? Chciałbym, żeby sesja administratora "nie gryzła się" z sesją użytkownika?
Dokładnie chodzi mi o to, żeby wywołanie session_unset() niszczyło tylko zmienne sesji użytkownika.

Może funkcje session_name(), session_module_name() mogą mieć jakieś zastosowanie? W manualu jest bardzo skromnie o nich ... Ktoś mi wspominał o wywoływaniu session_start() z parametrem, ale nie znalazłem nic na ten temat ...


pozdrawiam,
Tomasz
marcio
czesc nie jestem dobry w te kolcki ale jesli masz 2 sesje
$_SESSION['user']
i
$_SESSION['admin']
to mozesz usunac tylko jedna z nich robia tak
unset($_SESSION['user']); albo admin
poprostu session_unset usywa wszystkie aktywne sesje a unset tylko ta ktora chcesz biggrin.gif chyba o to chodzi ;p
Cienki1980
A możesz mi powiedzieć dlaczego potrzebujesz mechanizm dwóch sesji ?

Może kombinujesz jak koń pod górę nad rzeczą, którą można zrobić zupełnie inaczej.
tomq
marcio - niestety moje sesje mają wiele zmiennych - a nie tylko jedną ...

Cienki1980 - ogólnie chciałbym rozgraniczyć zmienne sesyjne administratora i użytkownika - chciałbym uniknąć sytuacji gdyby ktoś kiedyś coś dopisując powielił ich nazwy ... 

a sytuacja, w której coś takiego by mi się przydało wynikła podczas tworzenia formularza wielostopniowego (kilka podstron - kilka kroków) - danych nie chciałem zapisywać do bazy już po pierwszym kroku, więc po prostu wrzuciłem je do sesji winksmiley.jpg problem się pojawił kiedy chciałem usunąć te dane z sesji - wtedy padały wszystkie aktywne sesje ...

pozdrawiam,
Tomasz
marcio
no w sumie pan moderator ma racje mozesz to zrobic na 2 sesjach lub na jedenj i robic if'em tak
masz formularz z 2 inputami login i haslo i zeby wejsc na admina robisz tak
if($_POST['login']==admin && $_POST['haslo']==haslo_admina) {
$_SESSION['admin'];
header(Location="admin.php");
}
else {
$_SESSION['user'];
header(Location="user.php");
}
i potem na stronie admin.php sprawdzaj czy sesja admina zostala wyslana np tak
if(isset($_SESSSION['admin'])) {
//reszta skryptu
}
lub bez isset biggrin.gif i tak samo na stronie user'a sprawdzaj czy sesja user zostala wyslana w przeciwnym przypadku robisz else z echo('Blad musisz sie zalogowac'); chyba dobrze mowie druga metoda ktora teraz sobie obmyslilem to zrobic tabele admin z 2 kolumnami admin_login i admin_pass admin o tak

_________________________
admin_login | admin_pass |
____________|____________ |
mniej wiecej wiesz o co chodz

potem robisz zapytanie sql do bazy mniej wiecej takie
mysql_query('SELECT admin_login, admin_pass from admin');

aha oczywiscie zapomnailbym recznie zapisujesz login i haslo admina w bazie potem porownujesz je if'em o tak
if($_POST['login']==admin_login && $_POST['haslo']==admin_pass) {
//i reszta skryptu dla admina np tak
if(file_exist(./admin_panel.php)) {
include('admin_panel.php');
}
}
tylko nie wiem czy dobrze porownywuje wartosci z bazy z tymi z formularza jesli nie to powiedzice jak bo sam mam z tym problem
Oczywiscie to tylko idea jak mozesz zrobic panel admina wedlug mnie biggrin.gif mam nadzieje ze na cos sie przyda

ops napisales posta wczesniej odemnie i chyba napisalem cos co nie ma nic wspolnego z twoim problemem a nawet jesli nie ma to powiedzicie jak sie porownuje dane z bazy z tymi wpisanymi przez user'a
dzobert
Przecież $_SESSION to tablica, więc możesz zrobić tak $_SESSION[namespace][zmienna] = zmienna. I wszystkie zmienne masz rozgraniczone.
marcio
nie romiem mozesz podac przyklad na moim kodzie tam gdzie porownuje zmienne z bazy i te od user'a ;p

$zap = mysql_query('SELECT admin_login, admin_pass from admin');
while($log_pass = mysql_num_row($zap)) {
if($_POST['login']==$log_pass[0] && $_POST['haslo']==$log_pass[1]) {
$page = "admin_panel"
//i reszta skryptu dla admina np tak

if(file_exist(./admin_panel.php)) {

include('./basename($page.'php'));
}
}


tak to ma wygladac??wiem ze mozna to zrobic za pomoca mysql_fetch_assoc i potem tablice robic tak $log_pass['admin_login'] ale chce sie nauczyc dobrze korzystac z tablic numerycznej
Cienki1980
marcio zastosuj się do rady dzoberta i wykorzystaj:
podczas logowania zapisuj dane do $_SESSION['user'] np z takimi wartościami:
- $_SESSION['user']['login']=$login;
- $_SESSION['user']['log_date']=$data_logowania;
- $_SESSION['user']['privs']=$znacznik // znacznik który będzie określał czy user zalogowany jest adminem czy zwykłym userem

podczas obrabiania formularza zapisuj dane do $_SESSION['formularz']

Potem możesz wyczyścić dane za pomocą unset($_SESSION['formularz']) ( albo możesz je nadpisać $_SESSION['formularz']=array(); ) ... $_SESSION['user'] będzie nieruszona.

PS. do wszystkich piszących powyżej .. proszę poprawić BBCOde.
gam3r
zawsze możesz rozszerzyć podstawowy mechanizm sesji PHP i zaimplementować go według własnego wzorca...
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-2025 Invision Power Services, Inc.