Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Obiektowe php i sesje
Forum PHP.pl > Forum > Przedszkole
Wolfie
Witam

Poczytalem troche o sesjach no i chce teraz zaimplementowac je do wlasnej aplikacji wiec zrobilem tak :


Mam formularz logowania do skrzynki pocztowej :
  1. function login() {
  2. $this->output.='<div align="center" class="loginform">'.
  3. '<form action="index.php" method="post">'.
  4. '<input type="text" name="login">'.
  5. '<input type="password" name="pass">'.
  6. '<input type="hidden" name="check" value="ok">'.
  7. '<input type="submit" value="Zaloguj">'.
  8. '</form>'.
  9. '</div>';
  10. }


Za pomoca tablicy $_POST zmienne przekazywane sa do kontrolera i tam sytuacja wyglada tak :

  1. if($postvars['check'] == 'ok') {
  2. $_SESSION['login'] = $postvars['login'];
  3. $_SESSION['pass'] = $postvars['pass'];
  4. if(($this->model->connect('gmail.com',$_SESSION['login'],$_SESSION['pass'],'993','imap')) == false) {
  5. $this->login();
  6. } else {
  7. $this->inbox();
  8. }
  9. } elseif (is_numeric($postvars['naglowek'][0])) {
  10. $this->message($postvars['naglowek'][0]);
  11. } elseif(empty($postvars)) {
  12. $this->login();
  13. } else {
  14. echo 'dupa';
  15. }


Czyli zmienne post sa zapisywane jako zmienne sesji a nastepnie nastepuje logowanie do skrzynki pocztowej, jesli logowanie sie uda , wyswletla sie skrzybka $this->inbox.

Nastepnie klikam sobie na jakiejs wiadomosci w mojej skrzynce no i aplikacja przechodzi do kolejnego widoku ktory wyglada tak :

  1. function message($id) {
  2. $this->output.='Wiadomosc : '.$this->model->body($id);
  3. $this->output.='To jest wiadomosc numer'.$id.'<a href="java script:history.back();">Wstecz</A>';
  4. }


Wyswietlam sobie we wszystkich widokach tablice $_SESSION, no i w ostatnim widoku wiadomosci widze ze zmienne sesyjne sa ustawione prawidlowo czyli
$_SESSION['login'] - login do mojej skrzynki
$_SESSION['pass'] - haslo do mojej skrzynki

No i teraz chce sobie wrocic z widoku pojedynczej wiadomosci do widoku calej skrzynki no wiec klikam sobei przycisk 'wstecz' pyta mnie czy przeslac dane ponownie, ale niestety zamiast widoku skrzynki pojawia sie widok logowania , mimo ze dane sesyjne sa ciagle wyswietlane prawidlowo no i z tego co rozumiem ten kod :

  1. if(($this->model->connect('gmail.com',$_SESSION['login'],$_SESSION['pass'],'993','imap')) == false) {


Powinien ponownie przyjmowac zmienne sesyjne no i logowac sie bez problemu do skrzynki wyswietlajac jej zawartosc, a zamiast tego wyswietla mi sie widok logowania.....
potreb
No okey, sprawdź sobie czy wracając sesja dalej istnieje print_r. Jeżeli nie wtedy już lepiej. Zapewne session_start masz na poczatku pliku.
Wolfie
Troche przerobilem moj kontroler i teraz wyglada to tak :

  1. if($postvars['check'] == 'ok') {
  2. $_SESSION['login'] = $postvars['login'];
  3. $_SESSION['pass'] = $postvars['pass'];
  4. if(($this->model->connect('gmail.com',$_SESSION['login'],$_SESSION['pass'],'993','imap')) == false) {
  5. $this->login();
  6. } else {
  7. $_SESSION['logged'] = 1;
  8. $this->inbox();
  9. }
  10. } elseif (is_numeric($postvars['naglowek'][0])) {
  11. $this->message($postvars['naglowek'][0]);
  12. } elseif($_SESSION['logged'] == 1) {
  13. $this->inbox();
  14. } else {
  15. $this->login();
  16. }


Czyli najpierw mam pusta sesje, jesli uzytkonik zalogowal sie poprawnie wtedy oprocz zmiennych sesyjnych login i pass ustawiam zmienna $_SESSION['logged'] na 1 czyli oznacza to ze uzytkownik zalogowal sie poprawnie. Nastepnie wyswietlam skrzynke pocztowa. Klikajac na ktoras wiadomosc w skrzynce przechodze do widoku wiadomosci is_numeric($postvars['naglowek'][0].
Nastepnie klikam 'wstecz' no ale niestety, wyswietla sie cos takiego :

Cytat
Array ( [login] => [pass] => [check] => ok ) Array ( [login] => magisterkamw@gmail.com [pass] => jakieshaslo [logged] => 1 )
Warning: imap_open() [function.imap-open]: Couldn't open stream {imap.gmail.com:993/imap/ssl} in C:\Apache\htdocs\PrackaMgr\class.MailboxAccess.php on line 11


przy czym :

Cytat
Array ( [login] => magisterkamw@gmail.com [pass] => jakieshaslo [logged] => 1 )


To zmienne sesyjne

A pod tym znowu formularz logowania, czyli ciagle jest cos nie tak. Jedyna zmiana jaka nastapila to to ze teraz gdy cofam , pyta mnie czy chce przeslac ponownie zmienne.
Widac ze nie przekazuje parametrow do imap_open.......ale nie mam pojecia jak sobie z tym poradzic....

----------------------------------------------------------------------

Pomyslalem troche i zmodyfikowalem kawalek kodu gdzie jako warunek uzywam $_SESSION == 1 i zmodyfikowalem go do takiej postaci :

  1. } elseif($_SESSION['logged'] == 1) {
  2. if(!($this->model->connect('gmail.com',$_SESSION['login'],$_SESSION['pass'],'993','imap')) == false) {
  3. $this->inbox();
  4. }


Czyli teram mamy dwa miejsce w ktorych kod laczy sie ze skrzynka, ale chyba nie jest to zbyt efektywne rozwiazanie, co prawda za pierwszym razem gdy klikam przycisk 'wroc' wszystko jest ok i skrzynka sie wyswietla, ale gdy drugi raz wyswietlam jakas wiadomosc i klikam przycisk wroc juz nie jest tak pieknie bo znowu wraca mi do widoku logowania ! sciana.gif

Ktos pomoze ?
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.