Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ramki + sesja
Forum PHP.pl > Forum > PHP
rzseattle
Mam problem w ramkach nie ma zmiennych sesyjnyc tzn gdy sprawdzam
HTTP_SESSION_VARS na index.php to sa ale juz w samych ramkach ich ni ma co robic?
kurtz
Cytat
Mam problem w  ramkach nie ma zmiennych sesyjnyc tzn gdy sprawdzam  
HTTP_SESSION_VARS na index.php to sa ale juz w samych ramkach ich ni ma co robic?
hmm trzy pomysla
1) inna domena (ciastko niewazne)
2) nie odswiezane sa podstrony wiec zawartosc ramek nie jest przeladowywana
3) literowka albo inny dziabong ktory nie pozwala dobrze sprawdzic? ;)
rzseattle
Cytat
1) inna domena (ciastko niewazne)


1) ta sama domena

Cytat
2) nie odswiezane sa podstrony wiec zawartosc ramek nie jest przeladowywana


2) nie zabardzo wiem o co chodzi
a) czy index.php z ramkami jest wczytywany tylko raz?questionmark.gif bo jesli tak to mam maly problem
cool.gif dane sesyjne sa potrzebne tylko w podstronach ktore sie przeladowywuja

Cytat
3) literowka albo inny dziabong ktory nie pozwala dobrze sprawdzic?


3) raczej nie bo bez ramek dzialalo


Czy ktos wykorzystywal ramki i sesje --- moze po krotce wyjasni jak to robil bo ja pierwszy raz proboje ii mam w cholere probleow.
dragossani
ad.2.a) Tak na chłopski rozum to index ładowany jest raz - potem już tylko podstrony. Jednak nie do końca rozumiem, dlaczego jest to problem? Jeśli znajdę chwilę to przetestuje to i napiszę z jakim wynikiem.
dragossani
Zrobiłem prosty test z tymi sesjami w ramkach. 4 pliki:

ramki.php:
Kod
<?php

session_start();

$_SESSION['zmienna']="SESJA ISTNIEJE";

?>

<HTML>

<FRAMESET COLS="50%,50%">

    <FRAME NAME="left" SRC="left1.php">

    <FRAME NAME="right" SRC="right1.php">

</FRAMESET>

</HTML>


left1.php:
Kod
<?php

session_start();

print('To jest plik [left1.php]<BR>');

print('Stan sesji: '.$_SESSION['zmienna']);

?>

<BR><A HREF="right1.php" TARGET="right">right1.php</A>

<BR><A HREF="right2.php" TARGET="right">right2.php</A> (niszczy sesję)


right1.php:
Kod
<?php

session_start();

print('To jest plik [right1.php]<BR>');

print('Stan sesji: '.$_SESSION['zmienna']);

?>


right2.php:
Kod
<?php

session_start();

print('To jest plik [right2.php]<BR>');

print('Stan sesji: '.$_SESSION['zmienna']);

print('<BR><BR>Usuwamy sesję...');

session_destroy();

?>


Odpalasz ramki.php - tworzy się sesja, rejestrujemy zmienną. Ładują się ramki left1.php i right1.php. Obie mają aktywną sesję. Jeśli klikniesz w lewym oknie link [right2.php] to prawa ramka zostanie przeładowana, a sesja zniszczona. Łatwo sprawdzić, że sesji rzeczywiście nie ma klikając link [right1.php] - zmienna nie jest wyświetlana, a więc sesja nie istnieje.

U mnie chodzi to bez potknięć. Odpal u siebie i daj znać czy coś się krzaczy.
rzseattle
Cytat
ad.2.a) Tak na chłopski rozum to index ładowany jest raz - potem już tylko podstrony. Jednak nie do końca rozumiem, dlaczego jest to problem? Jeśli znajdę chwilę to przetestuje to i napiszę z jakim wynikiem.

Chodzilo o to ze tez to wziolem na chlopski rozum:
w zwyklej sesji sa uzywane ciasteczka wiec mozna je wyslac tylko w index poniewaz w nastepnych "podstronach" nie ma tej mozliwosci poniewaz juz zostala wyslana do przegladarki wiadomosc o ramkach - wiec jesli index laduje sie tylko raz to wydawalo mi sie ze sesja nie jest odswiezana czy cos takiego.
Chyba teraz wiesz o co mi chodzilo.

A co do twojego kodu to zaraz go przetestuje.
rzseattle
Myslalem jeszczze nad takim czyms:

Kod
$Dane[serwer]    = 'serwer';

$Dane[user]  = 'uzytkownik';

$Dane[haslo]    = 'haslo';

$Dane[db]    = 'baza_danych';

$Dane[tabela]    = 'tabela';







function zapisz($nazwa_zmiennej,$zmienna)

{

    global $Dane,$id_uzytkownika;

        //je&para;li nie istnieje id uzytkownika to wtedy jest tworzone

        if(!$id_uzytkownika)

      {

       

      function make_seed() {

              list($usec,$sec) = explode(" ", microtime());

             return ((float)$sec+(float)$usec) * 100000;

             }

              srand(make_seed());

          $id_uzytkownika = rand();

      

       }  

  

   // dane sa kodowane

   $zmienna=serialize($zmienna);

                 

                  

   $data=date("d");

  

   mysql_connect($Dane[serwer],$Dane[user] ,$Dane[haslo]);

   mysql_select_db($Dane[db]);

   // sprawdzamy czy już jest wpis do tabelki

   $pytanie="select id_uzytkownika from $Dane[tabela] where id_uzytkownika=$id_uzytkownika and id_zmiennej='$nazwa_zmiennej'";

   $wynik=mysql_query($pytanie) or die(mysql_error());

  

   $ilosc_wierszy=mysql_fetch_row($wynik);

    

   if ($ilosc_wierszy<1) {$pytanie="insert into $Dane[tabela] (id_uzytkownika,id_zmiennej,zmienna,data) values ('$id_uzytkownika','$nazwa_zmiennej','$zmienna','$data')";}

   else          {$pytanie="update $Dane[tabela] set zmienna='$zmienna' where id_zmiennej='$nazwa_zmiennej' and id_uzytkownika='$id_uzytkownika'"; }

  

   mysql_query ($pytanie) or die(mysql_error());

  

   return true;

}





//------------------------------------------------------

function odczyt()

{

     global $id_uzytkownika,$tablica,$dane;

    

    mysql_connect($Dane[serwer],$Dane[user] ,$Dane[haslo]);

    mysql_select_db($Dane[db]);

    

    $pytanie="select id_zmiennej,zmienna from $Dane[tabela] where id_uzytkownika='$id_uzytkownika'";

    $wynik = mysql_query ($pytanie) or die(mysql_error());





    while ($line = mysql_fetch_assoc($wynik)) {

       while(list($col_name, $col_value) = each($line))

         {

            if ($col_name=='id_zmiennej') {$col_value_id=$col_value;}

       if ($col_name=='zmienna') {unserialize($col_value); $tablica[$col_value_id]=$col_value;}

       }

         

     }

    if ($tablica) {extract ($tablica);}

    

  return true;

}


Co prawda te funkcje na razie nie dzialaja i maja wiele brakow (za niedlugo jednak je dokoncze - teraz pokazuje jedynie moje podejscie) ale w ramkach przypuszczam by byly wygodniejsze od prawdziwej sesji.

Jak ktos ma czas to moze mi odkryje blad w tym skrypcie, ale jezeli nie to pewnie za jakis czas za niego sie wezme pozadnie.

ps przypuszczam ze jednym z bledow jest to ze extract ($tablica) umiescilem w samej funkcji ale to tylko jedno spostrzezenie - moze maci wiecej
dragossani
Cytat
[...] w zwyklej sesji sa uzywane ciasteczka wiec mozna je wyslac tylko w index poniewaz w nastepnych "podstronach" nie ma tej mozliwosci poniewaz juz zostala wyslana do przegladarki wiadomosc o ramkach [...]

Jakoś nie mogę się zgodzić z tą wypowiedzią. Przecież sesję inicjujesz od nowa na każdej ładowanej stronie (czy też podstronie, jak wolisz). To, że jakieś zmienne sesji o tym samym identyfikatorze są już obecne na serwerze, nie ma znaczenia. Oczywiście, że jeśli ciacho jest obecne to nie jest wysyłane ponownie - nie przeszkadza to jednak w uruchamianiu sesji na dowolnej stronie, jeśli tylko zgadza się identyfikator. Zerknij do mojego kodu z poprzedniego post'a - session_start() jest takie samo w index.php jak w każdej z podstron.
rzseattle
Pewnie masz racje ale czesto uzywajac ramki + sesje napotykalem klopoty w stylu "headers already send" .... wiec mnie troche zrozum tymbarzdziej ze dopiero zaczalem z sesjami rolleyes.gif
dragossani
Rozumiem aż za dobrze. Namęczyłem się swego czasu z sesjami niemało. :wink:
Na pocieszenie mogę Ci powiedzieć, że mechanizm sesji potrafi płatać figle nawet prawdziwym specom - zachowuje się czasem jak wierzgający koń. smile.gif
robert_b
A dlaczego skrypt dragossaniego nie działa u mnie na localhoscie, a na serwerze działa?
Coś mam źle w pliku ini czy jak?
rzseattle
no nie, ale brudy wywlekles :oops: laugh.gif

ps a jaka masz wersje php?
robert_b
Jeżeli to było do mnie to 4.31.
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.