Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa sesijama i kolacima

[es] :: PHP :: Problem sa sesijama i kolacima

[ Pregleda: 1754 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ilija Studen
Novi Sad

Član broj: 3864
Poruke: 859
*.ftn.ns.ac.yu

Sajt: www.activecollab.com


+1 Profil

icon Problem sa sesijama i kolacima27.03.2004. u 08:03 - pre 244 meseci
Projekat na kome radim sada vec ulazi u zavrsnu fazu razvoja i pala je odlika da se testira u okruzenju u kome ce stvarno raditi (u pitanju je CMS na kome radim). Instalirao sam Linux (MDK 10), podesio sve kako treba (Apache 1.3.29, mod_ssl 2.8.16, PHP 4.3.4, MySQL 4.0.18) i sve naizgled radi kako treba (skripta ima error log koji belezi sve greske i upozorenja koja PHP i/ili skripta nadju - i uvek je prazan).

Medjutim, imam problema sa sesijama i kolacicima. Naime, index fajl izgleda ovako:

Code:
<?php

// Gomila konstanti, nikakav dodatni kod
include_once 'config.php';

// Kod za testiranje postaljam u prvu liniju ovog fajla
// Pri kraju ovog fajla se poziva klasa za autentifikaciju ($_SESSION je prioritetan,
// $_COOKIE se poziva samo ako $_SESSION['session_id'] nema (ispravnu) vrednost)
include_once _CORE_PATH . '/initCore.php';

include_once _CORE_PATH . '/class/adminDispatcher.class.php';
$disp = new mmAdminDispatcher();
$disp->dispatch();

// Zavrsnica (cuvanje logova, bench-a, oslobadjanje resursa etc.)
include_once _CORE_PATH . '/closeCore.php';

?>


Za one koji ne znaju, Dispatcher je klasa koja na osnovu vrednosti prenete preko GET ili POST poziva svoj metod definisan za obradu vrednosti koja je preneta. Ako nista nije preneseno, poziva se main metod, ako jeste, proverava se vrednost i na osnovu toga se poziva metod koji obradjuje taj "dogadjaj". Na primer, ako se prenese somefile.php?op=login poziva se login() metod koji na osnovu trenutnog stanja printa formu za login ili javlja da je korisnik vec ulogovan. Ako se ne prenese nista, poziva se main();

Jako dugacak uvod, no evo ga problem. Kada sam na index.php uvek mi javlja da korisnik nije ulogovan (iako bi trebalo da jeste). Stavljam u prvu liniju initCore.php fajla kod:

Code:
print_r($_SESSION);
print '<br/><br/>';
print_r($_COOKIE);


Na toj stranici se vidi da postoji index session_id u $_SESSION, ali je prazan (ne poseduje vrednost koju treba da ima). Medjutim, kada odem na stranicu index.php?op=login (ista stranica, drugaciji "dogadjaj"), i cookie i session imaju prave vrednosti (koje bi trebale da imaju). Kad se vratim nazad opet nemaju.

Promeni sam vrednost u PHP.ini use_sessions na 0, u KDE konfiguraciji odobrio kolacice i skripta je proradila. Medjutim, kada sam restartovao masinu opet isto (use_sessions je ostao na 0, KDE prihvata kolacice i dalje).

Sta moze da resetuje cookie i/ili sesije? Da li je moguce da je Apache konfigurisan da ih nekako "ubija" i ako jeste kako da to promenim? Kako objasniti da na jednoj te istoj stranici (samo je dodata jedan GET promenljiva) na istoj liniji koda sesije i kolacici imaju ispravne vrednosti, a kada je te promenljive nema da su unsetovane (pre te linije nista ne proverava GET, magic_quotes_gpc fix se nalazi iza te linije kao i klasa koja se bine o autentifikaciji korisnika)?

Za kraj da napomenem da ovaj sistem radi ispravno na WinXP.

Ako je potrebno mogu vam poslati httpd.conf i php_info da vidite kako je sve konfigurisano.

Unapred hvala na odgovorima...

PS: Ovo je plata teksta, ali se nadam da sam dovoljno dobro opisao problem...
http://www.activecollab.com - Alat za upravljanje projektima
 
Odgovor na temu

BlueIce
Marko Marić
Novi Sad

Član broj: 4448
Poruke: 215
195.178.35.*



Profil

icon Re: Problem sa sesijama i kolacima27.03.2004. u 14:17 - pre 244 meseci
Prvo, svaka čast - veoma ste brzi, posao ste relativno brzo uradili.

Postoje sledeće mogućnosti:
1. Paketi pod MDK nisu dobro kompajlirani (resolve: pokušaj meki drugi OS)
2. Pazi da nemaš neki karakter posle ?> taga. Imao sam neprijatna iskustva sa ovim
3. Ja sam ranije imao problema sa prijavljanjem na osnovnu stranicu, ali samo kada se prijaviš po prvi put. Shvatio sam da je najednostavnije srediti to ovako:
Code:

//Ovo je neki *veoma* stari kod da se odmah razumemo
if (!isset($_SESSION['main_viewed']))
{
  $_SESSION['main_viewed'] = "1";
  if (isset($_COOKIE['user']) && isset($_COOKIE['pass']))
  {
    $user = $_COOKIE['user'];
    $pass = $_COOKIE['pass'];
    if (check_user($user, $pass) == 1)
    {
      $user_info = get_user($user, $pass);

      global $smarty;
      $smarty->assign('user_info', $user_info);

      $user  = encrypt_text($user);
      $sess_id = session_id();
      $ip      = $_SERVER['REMOTE_ADDR'];
      $query = "UPDATE users SET last_visit= NULL,
       ip_address= '$ip',
       session   = '$sess_id'
         WHERE username= '$user'";
      db_upit($query);

      $_SESSION['user'] = encrypt_text($user);
      $_SESSION['id']   = $user_info['id'];
      if ($user_info['is_admin'] == 'YES')
      {
        maintain_site();
        $_SESSION['admin'] = 1;
      }
    }
    else
    {
      setcookie('user', '', 0 );
      setcookie('pass', '', 0 );
    }
  }
  $_SESSION['image_code'] = encrypt_text(random(5, 9));
  refresh();
  die();
}

4. Možda ne bi bilo loše da pročitaš kako se sesije realizuju u HTTP 1.1 protokolu, da ti sad sve ne pričam dohvazti odgovarajući RFC ili TR na W3C.

BTW, TEK SAD mi je jasno šta su kod vas dipečeri, trebao je Aco da mi da neki hint, a ne: "pa to su ti dispečeri" :)

Nego, šta misliš da počenš da koristiš factory model? Dao bog PHP5 je "samo što nije", pa ćemo najzad moći da stvari radimo na ljudski način.

PS: Postoji li još neki forum koji nam je zajednički? :)
 
Odgovor na temu

Ilija Studen
Novi Sad

Član broj: 3864
Poruke: 859
*.beotel.net

Sajt: www.activecollab.com


+1 Profil

icon Re: Problem sa sesijama i kolacima27.03.2004. u 18:25 - pre 244 meseci
100% sam uveren da nije greska u mom kodu vec da je problem u konfiguraciji samog servera i/ili PHP-a.

Kako to mislis da na MDK nisu lepo kompajlirani? Ne znam, ali mi to nekako zvuci apsurdno. Nisam koristio Cooker da instaliram server i PHP vec sam skinuo kod i kompajlirao ga sam...

OT:
---------------------
Dispatcher jeste jednostavna klasa, ali daleko od toga da je jednostavno sa njima raditi. Plus, sto ja ne radim na klasican nacin nego sam Dispacher klasu tako napisao da lepo radi i sa hijerarhisjki prosledjenim promenljivima... TJ. Moze da proverava i sub stranice :) A Aco nema pojma koliko se meni cini sta je Disp vec mu lepo zvuci :) BTW: Da li mi persiras ili govoris kao da na projektu radi mnozina??? Mogu oni da pricaju sta hoce i kako hoce, ali je cinjenica da na projektu radim sam i tako cu ga izgurati do kraja :) Kada sam rekao da projekat ulazi u finalnu fazu nisam mislio da je gotov. Ima tu jos da se radi, bar ovoliko, ali je cinjenica da vec sada predstavlja prilicno upotrebljiv sistem. I ako cemo o ovome, molim te da ide preko maila ili PP-a ne preko foruma... Ubuduce :)
http://www.activecollab.com - Alat za upravljanje projektima
 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
195.252.85.*

Sajt: localhost


+5 Profil

icon Re: Problem sa sesijama i kolacima28.03.2004. u 11:00 - pre 244 meseci
Citat:
Ilija Studen:
100% sam uveren da nije greska u mom kodu vec da je problem u konfiguraciji samog servera i/ili PHP-a.


ako si toliko siguran u sebe, ja ti predlažem da da umesto tih fajlova, i sveg ovog texta koji si napisao, ti napraviš namjanji mogući test-case koji ispoljava ovo ponašanje, i da ga izneseš?

tako ćemo mi ostali mnogo lakše moći da shvatimo problem i da ti pomognemo, a možda ćeš u tom postupku skraćivanja test slučaja i sam otkriti gde je problem (znam da se meni to uvek desi)..

 
Odgovor na temu

[es] :: PHP :: Problem sa sesijama i kolacima

[ Pregleda: 1754 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.