katomasz
20.05.2005, 15:02:52
Mam dwie strony. Na pierwszej sprawdzane jest logowanie i ustawiana sesja $name=$_SESSION['user']. Na drugiej sprawdzam if(isset($_SESSION['user'])) to ma wykonywać dalsze instrukcje, jeżeli nie ma wyjść. I zawsze wychodzi. Jeżeli próbuję wyciągnąć zmienną sesji, to tam nic nie ma. Dlaczego??
dr_bonzo
20.05.2005, 15:05:27
Bo trzeba cos do sesji zapisac:
$_SESSION['user'] = 'nazwa usera';
katomasz
20.05.2005, 19:20:22
Bo i tak jest. Wcześniej jest błąd. Prawidłowo jest $name='uzytkownik', a następnie $_SESSION['user']=$name. I to właśnie działa, a na następnej stronie już nie.
strife
20.05.2005, 20:36:28
Cytat(katomasz @ 2005-05-20 20:20:22)
Bo i tak jest. Wcześniej jest błąd. Prawidłowo jest $name='uzytkownik', a następnie $_SESSION['user']=$name. I to właśnie działa, a na następnej stronie już nie.
A masz na samym początku
session_start" title="Zobacz w manualu PHP" target="_manual ?
katomasz
21.05.2005, 06:12:58
Oczywiście. Na początku każdej strony jest session_start();
Pigula
21.05.2005, 07:56:14
to moze pokaz kod to ktos moze i cos ci podpowie
katomasz
21.05.2005, 09:05:42
Więc jeszcze raz. Pierwsza strona logowania. Ustawiana jest zmienna $_SESSION, która pobiera dane z nazwy użytkownika. W każdym następnym pliku, który, jak to z reguły bywa, musi być autoryzowany, sprawdzam, czy użytkownik, który próbuje się tam dostać otrzymał SID. Jeżeli tak to dalej jeżeli nie to do strony logowania. I niestety, SID jest tylko na stronie logowania (zamiast przeniesienia do następnej strony sprawdzam, czy na tej stronie jest ustawiona sesja, czy nie - i jest). Ale niestety, na każdej następnej już nie. I pytanie Dlaczego?
Pigula
21.05.2005, 09:52:19
sprobuj dowiazac do linka SID i sprawdz. a mi chodzilo o kod bo tak co piszesz to powinno dzialac a nie dziala wiec moze masz blad gdzies w skrypcie.
katomasz
21.05.2005, 10:54:23
Sprawdzę, ale mam możliwość dopiero w poniedziałek. Kod jest na pewno poprawny, bo gdy moje dzieło nie działało, to przepisałem żywcem przykłady z książek i było to samo. Chodziło mi o to, czy nie trzeba ustawić jakiś zmiennych w plikach konfiguracyjnych Apache'a lub php.
Dzięki, sprawdzę i odpowiem.
nospor
21.05.2005, 10:55:52
Cytat
Kod jest na pewno poprawny, ... przepisałem żywcem przykłady z książek i było to samo
Wierz mi, w książkach też zdarzają się byki
Pigula
21.05.2005, 11:32:37
Cytat(katomasz @ 2005-05-21 11:54:23)
Sprawdzę, ale mam możliwość dopiero w poniedziałek. Kod jest na pewno poprawny, bo gdy moje dzieło nie działało, to przepisałem żywcem przykłady z książek i było to samo. Chodziło mi o to, czy nie trzeba ustawić jakiś zmiennych w plikach konfiguracyjnych Apache'a lub php.
Dzięki, sprawdzę i odpowiem.
jezeli sprawdzasz strone na localhost i nic nie kombinowales przy skonfiguracji serwera to on raczej nie jest ot jego wina. a co do kodu to jak nospor mowi w ksiazkach tez sa bledy. pozatym naprawde duzym problemem nie jest zaznaczyc tekst a potem Ctrl+C i Ctrl+V
katomasz
21.05.2005, 19:22:50
Nie jestem dzieckiem i nie jestem "ciemniakiem". Wiem co wpisałem i posta podałem dlatego, że nie orientuję się dlaczego to nie działa, chociaż powinno. Myślę, że jeżeli takie mam słyszeć porady, to lepiej ich nie słyszeć. Proszę o zrozumienie, ale nie posunąłem się w tej sprawie, nie licząć przekazania, aby dowiązać SID do linka, ani kroku. Jedyne co, to mogę się niedługo zgubić o co mi chodziło.
Bonhart
21.05.2005, 19:51:50
Cytat(katomasz @ 2005-05-21 20:22:50)
Proszę o zrozumienie, ale nie posunąłem się w tej sprawie, nie licząć przekazania, aby dowiązać SID do linka, ani kroku. Jedyne co, to mogę się niedługo zgubić o co mi chodziło.
a moze ustawiasz gdzies session_name, sprawdz jeszcze czy masz wlaczone raportowanie bledow (albo ustaw sobie error_reporting(E_ALL)). Moze wysylasz gdzies jakis bialy znak

. I nie denerwuj sie tak bo trudno wrozyc z kuli co ktos tam ma w kodzie
katomasz
23.05.2005, 07:32:15
Oto błąd, który się zgłasza po wywołaniu $_SESSION['name'] - Undefined index: name in , i tu nazwa pliku. Podkreślam jeszczed raz, że początek pliku, to session_start(); . Wychodzi na to, że dane sesji nie są przekazywane pomiędzy stronami. Dlaczego?
scanner
23.05.2005, 08:28:19
Cytat(katomasz @ 2005-05-21 20:22:50)
Nie jestem dzieckiem i nie jestem "ciemniakiem".
Jesteś.
Zgodnie z zaakceptowanym przez Ciebie
Regulaminem Forum (pkt IV.2.d) Twoim obowiązkiem jest podać błędnie działający kod.
Nikt z nas nie jest jasnowidzem.
Kolejny Twój post bez zacytowania odpowiednich fragmentów kodu spowoduje zamknięcie wątku.
katomasz
23.05.2005, 09:11:06
Ależ proszę, chociaż wszystko jest w poprzednich postach, ale "kawę na ławę" panie Scanner.
Plik logowanie.html
<FORM METHOD=POST ACTION="Loguj.php">
<CENTER> <BR><B>PROSZ PODAĆ DANE DO LOGOWANIA</B><BR><BR><BR>
<INPUT TYPE=text NAME=LOGIN SIZE=20><BR><FONT SIZE="-1"><B>LOGIN</FONT></B><BR><BR><BR>
<INPUT TYPE=PASSWORD NAME=PASS SIZE=21><BR><FONT SIZE="-1"><B>HASŁO</B><BR><BR><BR>
<INPUT TYPE=submit VALUE=Loguj>
</CENTER>
</FORM>
Plik loguj.php
<?php
session_start();
$name=$_POST['LOGIN'];
$pass=$_POST['PASS'];
if ($name=="") $name="zzzz";
$nazwa=$name."\t".$pass."\t";
$file=fread(fopen("users.dat", "rb"),999);
if (!$file)
{
echo 'brak pliku';
}
if (strstr($file, $nazwa))
{
if ($name=="Administrat")
$name=$name."super";
$_SESSION['user']=$name;
header ("Location: main.php");
}
else
{
print "<B><CENTER>Logowanie nie powiodło się</CENTER></B><BR><BR><BR>";
print "<A HREF=logowanie.html>POWRÓT</A>";
}
?>
plik main.php
<?php
session_start();
error_reporting(E_ALL)
if (isset($_SESSION['user']))
header ("Location : logowanie.html");
print "udało się";
echo '<CENTER>Zalogowany' .$_SESSION['user']. '</CENTER>';
?>
i właśnie w pliku main.php zgłaszany jest błąd - Undefined index: name in , i tu nazwa pliku. Czy jest to wystarczająco jasno?
Poza tym "postarajmy się" nie oznacza trzeba. Chyba ktoś tu nie rozumie niektórych słów. A szkoda.
nospor
23.05.2005, 09:17:04
Używaj bbcode!!!
patrze na ten main.php i patrze i jakos nie widze zebys gdzies uzywal indexu name. A taki ponoc blad ci wywala...
katomasz
23.05.2005, 09:20:19
Sorki, ale to pozostało po próbach. Powinno być - Undefined index: user in , i tu nazwa pliku.
nospor
23.05.2005, 09:24:42
a nie powinno wywalac czegoś takiego skoro najpierw sprawdzasz czy jest ustawione to user. Bo masz przecież if'a : if (isset($_SESSION['user']))
edit: zapomniales o klamrach dla tego warunku i tylko jedną linię on obejmuje
katomasz
23.05.2005, 09:31:05
Jeszcze raz ten kod, który teraz jeest już całkiem w porządku
plik main.php
<?php
session_start();
error_reporting(E_ALL)
if (!isset($_SESSION['user']))
header ("Location : logowanie.html");
print "udało się";
echo '<CENTER>Zalogowany' .$_SESSION['user']. '</CENTER>';
?>
czyli, jeżeli zmienna sesji nie ustawiona wróć do logowanie.html, jeżeli ustawiona, wypisz echo. Sytuacja ma się w ten sposób, że dla kody zmienna sesji nie istnieje, bo czy jest if (isset; czy też if (!isset; to to działa tak samo.
nospor
23.05.2005, 09:34:25
Po raz drugi: używaj bbcode.
POzatym co ztergo ze ty robosz !isset skoro resztę i tak wywalasz poza warunkiem. powinno raczej byc tak:
<?php
if (!isset($_SESSION['user'])) header (\"Location : logowanie.html\"); else
{
print \"udało się\"; echo '<CENTER>Zalogowany' .$_SESSION['user']. '</CENTER>'; }
?>
katomasz
23.05.2005, 09:51:06
Niewiele to zmienia, bo dla mnie ważny jest jeden warunek. Proste, jeżeli coś nie jest spełnione to wykonaj (w tym przypadku wyjdź do innego pliku) Więc nie ma szans, aby przeszedł dalej w tym kodzie. Jeżeli warunek spełniony, to tak jakby nie był sprawdzany. Poza tym jeżeli zrobiłem tak jak mówisz (else i w klamry) to nie wywala żadnego błędu. Po prostu nie spełnia to żadnego warunku.
nospor
23.05.2005, 09:54:47
Cytat
Poza tym jeżeli zrobiłem tak jak mówisz (else i w klamry) to nie wywala żadnego błędu. Po prostu nie spełnia to żadnego warunku.
A wlasnie ze spelnia: a konkretnie !isset i wkoncu masz ok main.php bo się nie wykrzacza.
katomasz
23.05.2005, 10:02:30
Nie spełnia, ponieważ nie wykonuje kodu po if, ani nie wykonuje kodu po else. Po prostu omija te linie i idzie dalej
nospor
23.05.2005, 10:09:00
jeżeli masz if i else do if'a do któryś z tych kawalkow będzie zawsze wykonany. Daj se echo przed header (tylko w klamry weź) i zobaczysz ze wchodzi do tego if'a
katomasz
23.05.2005, 10:41:07
Zgadza się. Dlaczego więc po pierwsze, jeżeli już to nie wykonuje instrukcji header, a po drugie dlaczego stwierdza, że sesja nie istnieje?
nospor
23.05.2005, 10:45:00
daj exit; po header
A do main.php przekierowuje cie automatycznie po zalogowaniu?
katomasz
23.05.2005, 10:54:42
Jeżeli nazwa użytkownika i hasło zgadzają się to tak. Wpisanie exit; nie rajcuje, ponieważ potrzebuję powrotu do strony logowanie.html, a nie zatrzymania kodu.
nospor
23.05.2005, 10:56:54
no i tak bedzie bedzie. Wysle naglowek poprzez header, a exit spowoduje, zeby w tym pliku nic wiecej sie wykonalo co moze nabruździć. jak nie wierzysz to se manuala przeczytaj
katomasz
23.05.2005, 11:07:17
No dobrze. Więc jak zrobić, żeby w przypadku nieistnienia sesji następowało przekierowanie. A tak w ogóle, to dlaczego ta sesja nie jest przekazywana?
nospor
23.05.2005, 11:09:58
chyba napisalem. daj exit;
<?php
if (!isset($_SESSION['user'])) {
header (\"Location : logowanie.html\"); exit;//to powinno pomóc :) }
else
{
print \"udało się\"; echo '<CENTER>Zalogowany' .$_SESSION['user']. '</CENTER>'; }
?>
a czemu nie przekazywana? a session ID (SID) przekazujesz?
katomasz
23.05.2005, 11:15:48
Niestety, exit; nie pomaga. Nie następuje przekierowanie, lecz zatrzymanie w tym punkcie na tej stronie. Sesja jest przekazywana, ale tutaj już jest zgubiona. Nie wiem dlaczego.
nospor
23.05.2005, 11:30:32
co do header to masz blad. dwuktopek dales za daleko. powinno byc:
header ("Location: logowanie.html");
katomasz
23.05.2005, 11:41:47
To prawda. Dzięki, jeden błąd wykryty. Teraz pozostał problem z przekazaniem SID do następnej strony. Co zrobić?
nospor
23.05.2005, 11:43:28
ale w jaki sposób ty ten sid przekazujesz? przez url? nie zauewazylem abys gdzies mial cos takiego ...?SID=...
katomasz
23.05.2005, 11:46:21
Proszę więc o radę jak to przekazać, żeby działało. Jak wpisałem tak jak pytałeś, to SID nie zgadzał się z aktualnym na nowej stronie. Podaj fragment kodu, jak to przekazać.
nospor
23.05.2005, 11:58:47
a masz w php.ini taki wpis: session.use_cookies = 1. Jak nie to ustaw i miej wlaczone ciastka (tylko serwer zrestartuj po zmianach). POwinnno dzialac. testowalem teraz u siebie i dziala
katomasz
23.05.2005, 12:42:51
Wszystko jest tak jak piszes, jedynie nie działa. Dlaczego?
nospor
23.05.2005, 12:47:15
No dobra. A spróbuj tak:
plik loguj.php:
<?php
$name=$_POST['LOGIN'];
$pass=$_POST['PASS'];
if ($name==\"\") $name=\"zzzz\";
$nazwa=$name.\"t\".$pass.\"t\";
$file=fread(fopen(\"users.dat\", \"rb\"),999); if (!$file)
{
}
{
if ($name==\"Administrat\")
$name=$name.\"super\";
$_SESSION['user']=$name;
}
else
{
print \"<B><CENTER>Logowanie nie powiodło się</CENTER></B><BR><BR><BR>\"; print \"<A HREF=logowanie.html>POWRÓT</A>\"; }
?>
plik main.php:
<?php
if (!isset($_SESSION['user'])) {
header (\"Location: logowanie.html\"); exit;//to powinno pomóc :) }
else
{
print \"udało się\"; echo '<CENTER>Zalogowany' .$_SESSION['user']. '</CENTER>'; }
?>
Wklej do obu plików dokladnie jak napisalem. Wejdź na strone logowania i się zaloguj. Jak to nie pomoże to wymiekam
katomasz
23.05.2005, 13:24:12
Wielkie dzięki. To działa.
nospor
23.05.2005, 13:29:38
ufff, nareszczie
tylko pamiętaj, aby teraz do każdego linku dodawać to sid
katomasz
23.05.2005, 15:00:56
Jeszcze raz wielkie dzięki
Gość_Gibcio
29.05.2005, 19:43:59
<?
if(isset($_SESSION['user'])) {
echo'<font size=\"2\" face=\"Arial\">'; echo'<table border=\"0\" width=\"100%\">'; echo'<td width=\"100%\">'; echo'<table border=\"0\" width=\"100%\">'; echo'<td width=\"20%\">';
echo'<td width=\"80%\">';
}
else
{
header(\"Location:admin/logowanie/blad.php\"); }
?>
Jak uruchomie strone to wywala mi następujacy błąd:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\usr\apache\httpd\html\admin\index.php:2) in c:\usr\apache\httpd\html\admin\index.php on line 3
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\usr\apache\httpd\html\admin\index.php:2) in c:\usr\apache\httpd\html\admin\index.php on line 3
Administracja.
jest jakieś lekarstow na to czy trzeba coś zmienić w ustawieniach sesji?
czachor
29.05.2005, 20:28:22
Wystarczy, że poszukasz na forum pod hasłem headers already sent.
Gość_Reinmar
16.06.2005, 20:53:28
Usuń enter przed <?, bo przed session_start() nie mogą być żadne znaki wysłane do przeglądarki. Powinno działać. Jak coś to pod:
http://forum.php.pl/index.php?showtopic=31653 jest to troche lepiej przedyskutowane.
gregi1
25.02.2008, 22:33:57
Mam pytanie, otoz mam plik z funkcjami i chcialbym aby po kliknieciu w przycisk zaloguj przenioslo mnie automatycznie na strone dobre.php.
<?php
........
........//obsluga innych rzeczy + formularz do logowania + formularz do rejestracji
$_SESSION['user']=$user;
header ('Location: dobre.php'); ?>
A kod ktory podalem po kliknieciu w zaloguj wyswietla mi pusta strone.
Plik dobre.php wyglada tak:
<?php
require_once ("funkcje.php");
//kod PHP
if (isset($_SESSION['user'])) {
echo "Może posłużyć jako menu, czy coś innego ;)"; echo "<br><A HREF='wyloguj.php'>Wyloguj</a>"; }
else
{
echo "<H3 ALIGN=center>Nie masz uprawnień do korzystania z tej strony! Wróc i się zaloguj</h3>"; ?>
Dodam ze jak w tym pliku z funkcjami dam zamiast header np
Kod
echo "bla bla bla"
echo "<a href='dobre.php'> MOJ LINK</a>"
to po kliknieciu w "zaloguj" przenosi mnie na strone z tym bla bla bla i linkiem do strony dobre.php, ale chcialbym aby tam sie przenosic od razu po zalogowaniu. Moze mi ktos podpowiedziec jak to zrobic?
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.