ugrás a tartalomhoz

PHP session_save_path nem működik

rimo86 · 2011. Szep. 26. (H), 10.44
Tisztelt Programozók!

Nagy problémával fordulok Önökhöz. Adott egy tárhelyszolgáltató, illetve a localhost-omon lévő WAMP. Tökéletesen működik a session kezelésem. Fontos a működés szempontjából, hogy az admin felületen elindított session a session/admin mappában, a külső oldali session a session/site mappában helyezkedjen el. Ezt ugyebár a session_save_path("session/admin") php-s függvénnyel érem el. Ez működik is az említett két helyen. Most viszont átkerült másik tárhelyszolgáltatóhoz a weboldal. No itt a hiba. Nincs a session fájl sehol.
Sem az általam megadott mappákban, sem a phpinfo()-val kiíratott session.save_path local value: /var/www/virtual/almafa.hu/phptmp mappában.

Szóltam a szerver karbantartóknak, akik először azt kérték írjam le pontosan mi a baj. Tömören: hol a session, mert a kapott fpt-n nincs semelyik mappában sem? Most visszaírtak, hogy mondjam meg mely szerverbeállítást állítsák át, mert nekik minden más weboldaluk tökéletes (persze, mert azok leszarják a session helyét). Már bocsánat a kifejezésért de ..... tudja mi a hiba, és most nyálazzam át a kb. 14 oldalas szerverinfót.
Az érdekes, hogy a session.save_path master value teljesen másik mappában van: /var/lib/php5. Mi lehet a gond? Hol lehet elbaszva? A működő és nem működő szerveren is ugyan azok a phpinfo()-val kiíratott session beállítások, csak a működőn a master és a local value is megegyezik. Kérlek segítsetek. Előre is köszönöm.

Ui: Ezeket próbáltam:
mappajogot:7777-re
másik mappába
nem állítani a session_save_path-ot (a szerver local value-nak beállított mappában sincs )
teljes elérést adni: session_save_path(/var/www/virtual/almafa.hu/session/admin)
szerver verzió: PHP Version 5.2.17
 
1

Néhány kérdés

bb0072 · 2011. Szep. 26. (H), 11.31
A session-ök automatikusan elindulnak, vagy te indítod őket?

Ha te indítod őket, akkor a phpinfo nem fogja megmondani, hol vannak a sessionök, mert azt te felüldefiniálod, mielőtt elindítanád.

Ha meg automatikusan indulnak, akkor meg mindegy, hogy a php kódban még mit állítasz át.

A session cookie elküldésre kerül, vagy már az sincs?

Ha van, akkor egyébként működik a session, csak nem jó helyen van tárolva?
2

Válasz

rimo86 · 2011. Szep. 26. (H), 12.22
session.auto_start: off

Én indítom, a kód ami kezeli:
session_save_path($session_save_path);
session_name($session_name);
session_start();


PhpInfo:
http://kepfeltoltes.hu/view/110926/session_www.kepfeltoltes.hu_.png

A session tökéletes, minden remekül működik, csak nem a megadott mappában van. A gondom, hogy admin felhasználó esetén is csak annyit nézek, hogy van-e SESSION["user_id"], meg külső oldalon is. Megtudnám oldani, ha máshogy nevezgetem el a két helyen a változókat, csak már idegesít, hogy hogy lehet úgy elbaszni egy szerverbeállítást, hogy a megrendelt tárhelyemen nincsenek a session fájljaim.

Most kitaláltam a tuttit.
Csináltam egy fájlt: session.php
Kódja:
<?php
session_save_path("a");
session_name("almafa");
session_start();
$_SESSION["a"] = "teszt";
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
?>

Ki is írja, hogy:
Array
(
[a] => teszt
)

Az "a" mappa 7777 joggal tök üres.

Ennek a fájlnak a működését csak a haccess befolyásolhatja, aminek kódja:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
ErrorDocument 404 /index.php?m=tartalom&link=404

+Vagy 30 sor RewriteRule
3

open_basedir

janoszen · 2011. Szep. 26. (H), 12.24
Az open_basedir mire van állítva?
4

open_basedir

rimo86 · 2011. Szep. 26. (H), 12.27
Local value: /var/www/virtual/oldalam.hu/:/var/www/virtual/odalam.hu/phptmp/:/usr/share/php/
Master value:
no value
5

Megvannak

rimo86 · 2011. Szep. 27. (K), 13.30
Mostmár kiderült, hogy megvannak azok a fránya session fájlok (nincs jogom látni :S), csak a baj az, hogy én a /home/htdocs-ban vagyok és azon belül akarom a session/admin -ba menteni, a fájlok viszont az összes féle session_save_path() utasításomat figyelmen kívül hagyják, és a /home/phptmp-be menti.
6

Adatbázis

Poetro · 2011. Szep. 27. (K), 13.36
Ha tényleg hozzá akarsz férni a session adatokhoz, akkor miért nem használsz adatbázist? Abban azokhoz férsz hozzá, amelyikhez akarsz, és akkor amikor szeretnéd.
7

Miért?

rimo86 · 2011. Szep. 27. (K), 13.47
Remek megoldás. Gondoltam rá én is, ám a session kezelő osztályom nem fér hozzá az adatbázishoz, és nem akarom hekkelni. Amúgy is, ha van kifejezett php parancs a session fájl mentési helyének beállítására, akkor miért működik 3 szerveren, 1en meg nem? Tanulni akarok ebből az esetből. Az előző munkahelyemen "kókányoltam", hackeltem már eleget, és most már nem szeretnék ilyeneket elkövetni.
8

Osztály

Poetro · 2011. Szep. 27. (K), 15.16
Azt nem tudom, miért kellene ehhez hekkelni, csak a PHP pár beépített függvényét kell használni, hogy fájl helyett adatbázist használjon az adatok mentésére. Ha meg úgyis osztályt használsz, akkor meg főleg nem kell hekkelni, elvégre csinálhatsz egy saját osztályt abból származtatva, amit használsz, pont ez a lényege az osztályoknak.

Azt, hogy az adott szerveren miért nem működik, csak a szerver üzemeltetőjével tudod lefocizni, vagy átköltözöl egy olyanra, ahol működik, és valószínűleg jobban is jársz, mert ha ezt nem tudják neked megoldani, akkor mi van, ha komolyabb kérdésed lesz?
9

Félelem

rimo86 · 2011. Szep. 27. (K), 15.41
Igen, sajnos ettől félek én is. Jelenleg 2 tárhelyszolgáltatóval is kapcsolatban vagyok. Itt a session nem kerek, a másiknál meg nincs InnoDB :D
10

Megoldva

rimo86 · 2011. Szep. 27. (K), 17.19
Bár a tárhely szolgáltatóm nem tudott segíteni (fel is adták mára már), de megoldottam a kérdést. Mint isteni szikra csapott belém a felismerés. session_name($session_name); függvénynek adminban és külső oldalon is ugyanazt a nevet adtam. Ha a configomban az adminnak mást adok meg, mint a külső oldalon, akkor tökéletesen működik, mivel akkor 2 különböző nevű sessionről lesz szó :D.

Néha magamnak is okozok meglepetést, hogy 5 év webprogramozás után is ilyen sötét vagyok :). Elnézést a butaságom miatt.

Köszönöm a segítséget a kommentelőktől.