Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nie mogę skasować sesji
Forum PHP.pl > Forum > Przedszkole
Code46
Załóżmy, że mam 3 pliki (apache, php i mysql postawione na localhost):

index.php - zawiera formularz logowania (metoda POST), który wywołuje skrypt czyok.php

czyok.php - skrypt łączy się z bazą i sprawdza czy podany jest taki login i hasło jest poprawne. Jeśli nie to wracamy na stronę index.php. Jeśli login i hasło jest poprawne ładowany jest plik menu.php

menu.php - menu główne, z którego mogą być wywoływane inne skrypty. Menu służy do zarząrzania całym systeme, np. dodawanie danych do bazy, usuwania, edytowanie i wiele innych dla zalogowanego użytkownika.

logout.php - skrypt wylogowujący i ładujący strone index.php

Kod
<?
   session_unset();
   setcookie ('PHPSESSID','', time()-300,'/','',0); //zniszcz cookie
   session_destroy();
   header("location: main.php");
?>


Załóżmy, że zaloguje się do tego systemu a potem wyloguje. Kiedy zamknę przeglądarkę i otworzę ponownie, wpisze localhost/phpmyadmin/menu.php to pojawia się menu, i wyświetlany jest ostatnio zalogowany użytkownik. Można kasować dane z bazy, dodawać jednym słowem wszystko. A tak nie może być, bo po co wtedy hasło? Dopiero jak ręcznie usunę ciasteczko z przeglądarki to jest ok.

Pomóżcie - błagam
scanner
A moze tak łaskawie podasz np. wersję php, której używasz? Albo poczytasz o tym jak stosowac sesje w obecnych wersjach?
Code46
Cytat(scanner @ 2005-03-16 07:28:53)
A moze tak łaskawie podasz np. wersję php, której używasz? Albo poczytasz o tym jak stosowac sesje w obecnych wersjach?

Wersja php 5.0.2, Apache 2.0.52. Wszystko to stoi na WindowsXP. Czytałem o sesjach i nawet kopiowałem żywcem przykłady ale to nie pomaga sad.gif
czachor
  1. <?php
  2. //z manuala
  3. // Usuń wszystkie zmienne sesyjne
  4. $_SESSION = array();
  5. // Na koniec zniszcz sesję
  6. ?>
PS. Czy tylko ja nie mam PL literek w manulu?
Code46
Tak też robiłem ale nic z tego. Sesja jest pamiętana
yavaho
Normalnie powinno wystarczyc
unset($_SESSION['nazwa_zmiennej']);

Ale po tych komendach to juz zadna sesja nie powina byc aktywna
session_unset();
session_destroy();


PS. Ja tez nie mam polskich czcionek w manualu. Przegladarka zawsze mi ustawia kodowanie na UTF-8 i musze recznie zmieniac na Europe Srodkowa.
durandal
ja usuwam sesje za pomoca
session_unregister(zmienna);
Code46
Próbowałem też coś takiego
Kod
<?
    setcookie ('PHPSESSID','', time()-300,'/','',0); //zniszcz cookie
    session_unset();
    session_destroy();
    header("location: main.php");
?>


Sesja może jest zniszczona ale ciasteczko jest na dysku. Jak usune ciasteczko (Opcje przeglądarki) to wtedy jest ok. Już nie wiem co robić sad.gif
yavaho
Podejrzewam ze masz skrypt, ktory automatycznie tworzy zmienna sesyjna na podstawie obecnosci ciasteczka u klienta.
Takie cos wykorzystuje sie np podczas autologinu.
Pokaz kawalek kodu w ktorym zapisujesz ciasteczko u klienta. Aby usunac ciasteczko musisz podac dokladnie jego nazwe.
Code46
To jest skrypt, który odbiera dane z formularza (logowania) i sprawdza login i hasło:
Kod
<!--Logowanie do systemu -->
<?
    session_start();
    include "config.inc.php";
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">

<meta name="pragma" content="no-cache" />

<title>Logowanie...</title>
<link rel="stylesheet" type="text/css" href="autoryzacja.css" />
</head>
<body>
<?
    //Połączenie z bazą danych
    $conn = mysql_connect($server, $identyfikator, $haslo)
     or die ("Nie udało się połączyć z bazą danych! BŁĄD: ".mysql_error());
    //Wybór bazy danych
    mysql_selectdb($baza)
     or die ("Nie udało się wybrać bazy! BŁĄD: ".mysql_error());

    //Zapytanie o login i hasło
    $query = "SELECT * FROM konto WHERE login='$_POST[logid]';";
    $result = mysql_query($query)
  or die ("Zapytanie nieudane! BŁĄD: ".mysql_error());
    $query_data = mysql_fetch_row($result);

  //Sprawdzenie czy podany login i hasło są poprawne
  if (MD5($_POST[pas]) == $query_data[2])
  {
     //Udana autoryzacja
     if ($query_data[3] == 0)
     {
    //Zapytanie o dane osoby zalogowanej z tabeli pracownika
    $query = "SELECT konto.konto_id, login, haslo, kto, imie, nazwisko FROM konto, pracownik ".
      "WHERE login='$_POST[logid]' AND konto.konto_id=pracownik.konto_id;";
    $result = mysql_query($query)
        or die ("Zapytanie nieudane! BŁĄD: ".mysql_error());
    $query_data = mysql_fetch_row($result);

    $_SESSION[uzytkownik] = $query_data[4] . " " . $query_data[5];
    $_SESSION[nick] = $query_data[1];
    header("location: start.php");
     }
     else
     {
     //Zapytanie o dane osoby zalogowanej z tabeli pracownika
    //Zapytanie o dane osoby zalogowanej z tabeli pracownika
    $query = "SELECT konto.konto_id, login, haslo, kto, imie, nazwisko FROM konto, klient ".
      "WHERE login='$_POST[logid]' AND konto.konto_id=klient.konto_id;";
    $result = mysql_query($query)
        or die ("Zapytanie nieudane! BŁĄD: ".mysql_error());
    $query_data = mysql_fetch_row($result);

    $_SESSION[uzytkownik] = $query_data[4] . " " . $query_data[5];
    $_SESSION[nick] = $query_data[1];
    header("location: start.php");
     }
  }
  else
  {
  // Zły login lub hasło
  ?>
  <br><br><br><br><br><br><br><br><br>
  <table width="80%" align="center" border="0" cellpadding="14">
     <tr>
    <td><h2 class="error">Podałeś zły login lub hasło!</h2></td>
     </tr>
     <tr>
    <br>
    <td align="center"><input type="Submit" Name="Button" Value="Wróć" onClick="location.href='main.php'"></h2></td>
     </tr>
  </table>
  <?
  }

    //Zamknięcie połączenia z bazą danych
    mysql_close($conn);
?>

</body>
</html>


Jeśli użytkownik podał dobry login i hasło uruchamiany jest plik start.php:
Kod
<!--Ramki-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">

<meta name="pragma" content="no-cache" />

</head>
    <frameset cols="200,*" frameborder="yes" border="3">
  <frame src="menu.php" name="menu" scrolling="auto" noresize />
  <frame src="wizytowka.php" name="wizytowka" scrolling="auto" />
    </frameset>
<noframes>
</html>


Zawartość pliku logout.php już macie wyżęj. Najlepsze jest to, że pytałem się ludzi którzy pracują jako koderzy php i nie wiedzą co z tym zrobić sad.gif
Darti
a może session.use_cookies w php.ini ustawic na 0? zauważyłem że nawet jak nie ustawiam zadnych cookiesow tylko robie session_start() to tworzy mi cookiesa temp'ach. Po przestawieniu powinien przekazywac nr sesji w adresie.
Code46
Cytat(Darti @ 2005-03-16 23:20:11)
a może session.use_cookies w php.ini ustawic na 0? zauważyłem że nawet jak nie ustawiam zadnych cookiesow tylko robie session_start() to tworzy mi cookiesa temp'ach. Po przestawieniu powinien przekazywac nr sesji w adresie.

Ale co wtedy z użytkownikami systemu, którzy zanzaczą przy logowaniu (myślę o dodaniu takiej opcji), że chcą być automatycznie logowani do systemu po wejściu na stronę??
Darti
Cytat(Code46 @ 2005-03-16 23:24:28)
Ale co wtedy z użytkownikami systemu, którzy zanzaczą przy logowaniu (myślę o dodaniu takiej opcji), że chcą być automatycznie logowani do systemu po wejściu na stronę??

to dla nich specjalnie ustawisz cookiesa (ale sesje dalej cookiesow uzywac nie powinny)
Code46
Cytat(Darti @ 2005-03-16 23:34:16)
Cytat(Code46 @ 2005-03-16 23:24:28)
Ale co wtedy z użytkownikami systemu, którzy zanzaczą przy logowaniu (myślę o dodaniu takiej opcji), że chcą być automatycznie logowani do systemu po wejściu na stronę??

to dla nich specjalnie ustawisz cookiesa (ale sesje dalej cookiesow uzywac nie powinny)

Czy jeśli mój plik logout.php (który zamieściłem na samym początku posta) usuwa sesje, to dlaczego nie chce skasować pliku coockie? Przeczytałem artykuł http://www.forum.kasart98.com/viewtopic.ph...der=asc&start=0
i jest tam taki przykład licznik.php a zawartość:
Kod
<?
session_start();
echo session_id();
if(isset($_SESSION['ile']))
{
$_SESSION['ile']++;
}
else
{
$_SESSION['ile'] = 1;
}
echo("<br><br> Ilość wejść na strone w ciągu trwania sesji: $ile");
print $_SESSION['ile'];
?>

Jeśli mam włączoną obsługę cookies to po każdym odświeżeniu strony licznik jest zwiększany o 1. Ale jak wyłącze obsługę cookies to cały czas jest 1? Przecież korzysta z sesji?? Albo drugi przykład z tej stroniki - prosty system logowania i wylogowywania. Jak cookies włączone to po zamknięciu przeglądarki i ponownym wejściu na stronę pisze że jestem zalogowany jako test dopóki nie nacisnę wyloguj. A jak wyłącze coockies to nie pamięta.. Nie rozumiem tego
Darti
hmm ja tez nie kumam cookies i sesji - są głupie te mechanizmy smile.gif wiem tylko ze jak ustawie session.use_cookies na 0 to do ciacha mi nie dopisuje PHPSESSID z wartoscia.

Pozdrawiam
Code46
Cytat(Darti @ 2005-03-17 00:05:46)
hmm ja tez nie kumam cookies i sesji - są głupie te mechanizmy smile.gif wiem tylko ze jak ustawie session.use_cookies na 0 to do ciacha mi nie dopisuje PHPSESSID z wartoscia.

Pozdrawiam

Ja już troszke to obczaiłem. session_start(); ustawia sesje, która po zakończeniu sesji (zakmnięciu przeglądarki ginie). Ale ustawienie sesji ustawia też tzw. ciasteczko sesyjne. Wystarczy je skasować. Tylko dlaczego
Kod
...
...
setcookie ('PHPSESSID','', time()-300,'/','',0); //zniszcz cookie


Nie niszczy tego ciasteczka? Jakby niszczyło to już po problemie sad.gif
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.