Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sesje
Forum PHP.pl > Forum > Przedszkole
letus
Jak to jest wkońcu z tym sesjami bo ja już do głowy dostaje. Mam w jednym pliku całe zarządzanie sesjami i działa prawidłowo i jak zarejestruje dane w rekordzie sesji[php:1:bc4c14f10a]<?php
$_SESSION['user']=$user;
?>[/php:1:bc4c14f10a]
to w danym pliku mogę ją odczytać, ale jak już przechodzę do innego pliku wywołuję session_start() a $_SESSION['user'] jest pusta. ID sesji jest nadal taki sam a w rekordzie sesji z bazie MySQL wartość jest. Czy ja robie coś źle czy poprostu skrypt mnie nie lubi smile.gif :?:
marcys
Ja to robie tak, nie wiem czy dobrze, ze odczytuje zamiast $_SESSION['user'] poprostu $user
Majdan
Cytat
Ja to robie tak, nie wiem czy dobrze, ze odczytuje zamiast $_SESSION['user'] poprostu $user

Zdecydowanie lepsze jest użycie tablicy $_SESSION[]. Manual wszystko mówi...

PS. Nie jestem pewien, ale problem może tkwić w "register_globals". Spróbuj dać na "off". To tylko przypuszczenie, ale zawsze możn spróbować. :wink:
letus
Jest ustawione na off. Dziwi mnie właśnie to że w rekordzie są dane zapisane ale nie idzie ich odczytać poprzez tablice $_SESSION.
..:: pingu ::..
moze masz jakis błąd w skrypie, a skpróbuj czy
[php:1:3fef76338d]<?php
print_r ( $_SESSION );
?>[/php:1:3fef76338d]
czy cos wyswietla ?
letus
Cytat
moze masz jakis błąd w skrypie, a skpróbuj czy
[php:1:6b045c6eed]<?php
print_r ( $_SESSION );
?>[/php:1:6b045c6eed]
czy cos wyswietla ?

Tak, wyświetla samo "Array()"
shima
Napisałem dwa głupie skrypciki:
jeden.php
[php:1:fa4c63db5f]<?php
session_start();
$_SESSION['obiekt'] = "coś";
$_SESSION['obiekt'] .= " i nic";
echo $_SESSION['obiekt'];
?>[/php:1:fa4c63db5f]
dwa.php
[php:1:fa4c63db5f]<?php
session_start();
echo $_SESSION['obiekt'];
?>[/php:1:fa4c63db5f]
Sprawdź też którą masz wersję php.
@majdan register_globals=Off to dodatkowe ograniczenie, więc jak miałoby pomóc?
..:: pingu ::..
Cytat
Mam w jednym pliku całe zarządzanie sesjami

a mozesz udostępic troche kodu co odczytuje te dane ?
pZyHo
Witam

Sprobuj moze 'recznie' sprawdzic, czy zmienna jest przekazywana poprawnie (w pliku sesji).

Poza tym, jak przekazujesz id sesji? W url czy moze przez cookie?

Pozdroofka
pzyho
letus
No więc u mnie wygląda to tak:
index.php[php:1:9666c510cd]<?php
require_once('./class.php');
// Tutaj jest utworzony obiek z klasy Session
// i ustawienie wszystkich fukncji sesji, bo kożystam z MySQL
session_start();
...
$go=$_GET['go'];
if($go=='loguj') {
$uzytkownik=$_POST['uzytkownik'];
$haslo=md5($_POST['haslo']);
$uzytkownik->loguj($uzytkownik, $haslo); // Tutaj jeśli nazwa użytkownika i hasło jest poprawne jest ustawione $_SESSION[uzytkownik] a jej wartościa jest ID użytkownika w bazie, i w rekordzie sesji dane sa zapisane, ID uzytkownika jest podany prawidlowo
}
elseif($go=='costam') {
echo('<frameset border="0" framespacing="0" rows="88,1*" frameborder="NO" cols="*">'
.'<frame name="topFrame" src="./htmls/menu/gora.html" noresize>'
.'<frameset border="0" framespacing="0" frameborder="NO" cols="82,1*">'
.'<frame name="leftFrame" src="./htmls/menu/lewo.html" noresize>'
.'<frame name="mainFrame" src="body.php">' //Właśnie w tym pliku dane sesji nie są widoczne mimo że rekord jest zaktualizowany bo wartość czasu się zmieniła
.'</frameset></frameset>');
}
?>[/php:1:9666c510cd]
body.php
[php:1:9666c510cd]<?php
session_start();
echo($_SESSION['uzytkownik']); //I nic nie wyświetla.
...
?>[/php:1:9666c510cd]
shima
Cytat
No więc u mnie wygląda to tak:
index.php[php:1:a6759c1e76]<?php
$uzytkownik->loguj($uzytkownik, $haslo); // Tutaj jeśli nazwa użytkownika i hasło jest poprawne jest ustawione $_SESSION[uzytkownik] a jej wartościa jest ID użytkownika w bazie, i w rekordzie sesji dane sa zapisane, ID uzytkownika jest podany prawidlowo
}
?>[/php:1:a6759c1e76]

A ponieważ kawałek opisany Twoim komentarzem wydaje się byc kluczowy, to może go tu wrzucisz?
letus
Proszę bardzo
[php:1:1745b1720a]<?php
function loguj_uzytkownika($uzytkownik, $haslo) {
$rezultat=mysql_fetch_array(mysql_conn('SELECT c FROM uzytkownicy WHERE b="'.$uzytkownik.'"'));
if($rezultat['c']!=$haslo) {
error('Błąd przy próbie zalogowania użytkownika:<br>Błędne hasło');
}
else {
$uzytkownik=$this->pobierz_id($uzytkownik);
$_SESSION['uzytkownik']=$uzytkownik;
}
}
//i na wszelki wypadek jeszcze to jakby były wątpliwości
function pobierz_id($uzytkownik) {
$id=mysql_fetch_array(mysql_conn('SELECT a FROM uzytkownicy WHERE b="'.$uzytkownik.'"'));
return($id['a']);
}
?>[/php:1:1745b1720a]
shima
[php:1:e936b25081]<?php
function loguj_uzytkownika($uzytkownik, $haslo) {
$rezultat=mysql_fetch_array(mysql_conn('SELECT c FROM uzytkownicy WHERE b="'.$uzytkownik.'"'));
if($rezultat['c']!=$haslo) {
error('Błąd przy próbie zalogowania użytkownika:<br>Błędne hasło');
}
else {
$uzytkownik=$this->pobierz_id($uzytkownik);
echo $uzytkownik.'<br>'; //dodana linijka - sprawdź efekt w tym samym pliku
$_SESSION['uzytkownik']=$uzytkownik;
}
}
//i na wszelki wypadek jeszcze to jakby były wątpliwości
function pobierz_id($uzytkownik) {
$id=mysql_fetch_array(mysql_conn('SELECT a FROM uzytkownicy WHERE b="'.$uzytkownik.'"'));
return($id['a']);
}
?>[/php:1:e936b25081]
Sprawdź z tą linijką kŧórą dodałem, problem może tkwić w pobieraniu z bazy
letus
No i pokazuje ID użytkownika, ale chyba nie w tym tkwi problem bo ID jest prawidłowo zapisany w rekordzie sesji, a dopiero próba odczytania go z rekordu sesji nie daje rezultatu. Ja to moge zrobic w innym sposób ale przez $_SESSION[] jest poprostu łatwiej i szybciej.
shima
Rozumiem, ze proste skrypty w stylu tych, które napisałem parę postów wyżej działają, więc przekazywanie jest ok, serwer nie miesza, a problem tkwi w Twoim skrypcie. Masz session_start(), więc tablica jest dostepna, sprawdzasz w pierwszym pliku i wypisuje, a w drugim już nie, nie zamykasz przeglądarki i nie masz nigdzie session_destroy(). Wersję php też masz już z obsługą sesji, więc wysiadam.
..:: pingu ::..
moze takie głupir pyanie ale czy używasz standardowych sesji czy stworzyłes swój własny mechanizm obsługi sesji questionmark.gif
letus
Własny. Skożystałem se skryptu umieszczonego w artykule nt. sesji ale z pewną modyfikacja bo oryginalny skrypt zamiast aktualizować rekord sesji dodawał poprostu nowy mimo że czas sesji jeszcze się nie skończył.
..:: pingu ::..
no to byc moze jakiś błąd występuje w tym skrypcie...
Jakbyś mógł zamiescić funkcje odpowiedzialna za oczytywanie danych sesji ?
letus
[php:1:8c9ee71e9a]<?php
class Session {
var $db_config;
var $session_table;
var $session_lifetime;
function session($db_config = '', $session_table, $session_lifetime = 0) {
if(!empty($db_config)){
$this->db_config['host'] = $db_config['host'];
$this->db_config['user'] = $db_config['user'];
$this->db_config['password'] = $db_config['password'];
$this->db_config['datebase'] = $db_config['datebase'];
$this->db_config['persistent'] = $db_config['persistent'];
}
$this->session_table = $session_table;
}
function connection() {
$connect_type = $this->db_config['persistent'] ? 'mysql_pconnect' : 'mysql_connect';
$connect = @$connect_type($this->db_config['host'], $this->db_config['user'], $this->db_config['pass']);
$db_select = @mysql_select_db ($this->db_config['datebase']);
if ($connect && $db_select) {
return true;
}
else {
return false;
}
}
function _open($session_savepath, $session_name) {
if($this->db_config != null) {
$this->connection();
}
return true;
}
function _close() {
$this->_gc($this->session_lifetime);
return true;
}
//Poniżej znajduje się część odpowiedzialna za czytanie sesji
function _read($session_id) {
$sql_query = "SELECT session_value FROM " . $this->session_table . " WHERE session_id = '" . $session_id . "'";
$result = @mysql_query($sql_query);
if ($result && @mysql_num_rows($result) > 0) {
$row = mysql_fetch_array($result);
$session_value = $row['session_value'];
return $session_value;
}
else {
return false;
}
}
// modyfikacja dotyczyła fragmentu poniżej
function _write($session_id, $session_value) {
$session_start = time();
$session_time = time();
if($session_value!='') {
$sql_query = "UPDATE " . $this->session_table . " SET session_time = " . $session_time . ", session_value = '" . $session_value . "' WHERE session_id = '" . $session_id . "'";
$result = @mysql_query($sql_query);
if (!$result) {
return false;
}
else {
$sql_query="SELECT * FROM sesje WHERE session_id='".$session_id."'";
$result=mysql_num_rows(@mysql_query($sql_query));
if($result=='0') {
$sql_query = "INSERT INTO " . $this->session_table . " (session_id, session_start, session_time) VALUES ('" . $session_id . "', " . $session_start . ", " . $session_time . ")";
$result = @mysql_query($sql_query);
if (!$result) {
return false;
}
else {
return true;
}
}
}
}
else {
$sql_query = "UPDATE " . $this->session_table . " SET session_time = " . $session_time . " WHERE session_id = '" . $session_id . "'";
$result = @mysql_query($sql_query);
if (!$result) {
return false;
}
else {
$sql_query="SELECT * FROM sesje WHERE session_id='".$session_id."'";
$result=mysql_num_rows(@mysql_query($sql_query));
if($result=='0') {
$sql_query = "INSERT INTO " . $this->session_table . " (session_id, session_start, session_time) VALUES ('" . $session_id . "', " . $session_start . ", " . $session_time . ")";
$result = @mysql_query($sql_query);
if (!$result) {
return false;
}
else {
return true;
}
}
}
}
}
function _destroy($session_id) {
$sql_query = "DELETE FROM " . $this->session_table . " WHERE session_id = '" . $session_id . "'";
$result = @mysql_query($sql_query);
if ($result) {
return true;
}
else {
return false;
}
}
function _gc($session_lifetime) {
$sql_query = "DELETE FROM " . $this->session_table . " WHERE session_time < " . time() - $session_lifetime . "";
$result = @mysql_query($sql_query);
if ($result) {
return true;
}
else {
return false;
}
}
}

?>[/php:1:8c9ee71e9a]
..:: pingu ::..
znalazłem dw małe przeoczenia chyba ...
Linia 61
[php:1:2543a3230b]<?php
$sql_query="SELECT * FROM sesje WHERE session_id='".$session_id."'";
?>[/php:1:2543a3230b]
na
[php:1:2543a3230b]<?php
$sql_query="SELECT * FROM " . $this->session_table . " WHERE session_id='".$session_id."'";
?>[/php:1:2543a3230b]
oraz linia 82

[php:1:2543a3230b]<?php
$sql_query="SELECT * FROM sesje WHERE session_id='".$session_id."'";
?>[/php:1:2543a3230b]
na
[php:1:2543a3230b]<?php
$sql_query="SELECT * FROM " . $this->session_table . " WHERE session_id='".$session_id."'";
?>[/php:1:2543a3230b]
nei wiem ale jesli miałes tabele nazwaną sesje to ci nic to nie da ;/ a w bazie pojawiaja sie wpisy questionmark.gif
letus
Wiem pisałem na szybko i odrazu wpisywalem nazwe tabeli
'sesje' = $this->session_table
Rekordy sa dodawane, session_time jest aktualizowane przy kazdym odswieżeniu strony, tylko $_SESSION[] nie chce wczytać danych sesji
..:: pingu ::..
Cytat
body.php
[php:1:1bb22ee802]<?php
session_start();
echo($_SESSION['uzytkownik']);
?>[/php:1:1bb22ee802]

wiesz moze problem lezy w tym ze w drugim pliku nie ustawiłes session_set_save_handler () lub nie zainkludowałes tej klasy....
letus
Jest wszestko zrobione klasa zaincludowana, funkcje ustawione w session_set_save_handler() no ja już bladego pojecia nie mam czemu to nie działa :
..:: pingu ::..
wiesh napisz mi skrutóre bazy oraz jak te dunckje wykonujesz, to sprawdze u mnie ok? jak chcesz mozesz mi napisac na gg 3770672
letus
Witam ponownie. Ostatnio nie miałem czasu żeby siąść do tego skryptu ale dziś wykombinowałem troche wolnego czasu i mniej więcej wiem gdzie może być błąd
[php:1:b4c94919ab]<?php
...
function _read($session_id) {
$sql_query = "SELECT session_value FROM ".$this->session_table." WHERE session_id='".$session_id."'";
$result = @mysql_query($sql_query);
if ($result && @mysql_num_rows($result) > 0) {
$row = mysql_fetch_array($result);
$session_value = $row['session_value'];
return $session_value;
}
else {
return false;
}
}
...
?>[/php:1:b4c94919ab]
funkcja ciągle zwraca false, a jak usuwam @ sprzed mysql_query() to wyświetla błędy:
Cytat
Warning: mysql_query() [function.mysql-query]: Access denied for user: 'nobody@localhost' (Using password: NO) in /mnt/hdb1/home/letus/public_html/stronka/class.php on line 116

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /mnt/hdb1/home/letus/public_html/stronka/class.php on line 116

tylko z jakiej racji są te błędy, pozostałe funkcje (_write, _destroy, _gc) działają poprawnie
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.