Znalazłem gotowy skrypt przedstawię go poniżej
<?
class Session
{
var $p;
/**
* Dane konfiguracyjne bazy danych
* @var array $config Ustawiane przez konstruktor @see session();
* @access public
*/
var $config;
/**
* Tabela z danymi sesyjnymi
* @var array $session_table Ustawiana przez konstruktor @see session();
* @access public
*/
var $session_table;
/**
* Maksymalny czas istnienia nieaktywnej sesji
* @var array $session_table Ustawiana przez konstruktor @see session();
* @access public
*/
var $session_lifetime;
/**
* Konstruktor
* Ustalanie parametrów i przygotowywanie środowiska pod funkcjonowanie klasy
* @param string $config Dane konfiguracyjne bazy
* @param string $session_table Tabela z danymi sesyjnymi
* @param string $session_lifetime Maksymalny czas istnienia nieaktywnej sesji @default 0
* @return void
* @access public
*/
function session($config = '', $session_table, $session_lifetime = 0)
{
// Ustalanie danych konfiguracyjnych bazy
$this->config['DBHost'] = $config['DBHost'];
$this->config['DBUser'] = $config['DBUser'];
$this->config['DBPass'] = $config['DBPass'];
$this->config['DBName'] = $config['DBName'];
$this->config['persistent'] = $config['persistent'];
}
// Ustawianie tabeli
$this->session_table = $session_table;
}
/**
* Nawiązywanie połączenia bazodanowego
* @return bool
* @access public
*/
function connection() {
$connect_type = $this->config['persistent'] ? 'mysql_pconnect' : 'mysql_connect';
$connect = $connect_type($this->config['DBHost'], $this->config['DBUser'], $this->config['DBPass']) or
Die("Nieee"); $this->p = $connect;
if ($connect && $db_select) { return true; } else { return false; }
}
/**
* Inicjalizacja sesji
* @param string $sesion_savepath Lokalizacja zapisu sesji
* @param string $session_name Nazwa sesji
* @return bool
* @access private
*/
function _open($session_savepath, $session_name)
{
if($this->config != null) {
// Nawiązywanie połączenia
$this->connection();
}
return true;
}
/**
* Zakończenie sesji
* @return bool
* @access private
*/
function _close()
{
$this->_gc($this->session_lifetime);
return true;
}
/**
* Odczytywanie danych sesyjnych
* @param string $session_id Identyfikator sesji
* @return mixed
* @access private
*/
function _read($session_id)
{
$sql_query = "SELECT session_value
FROM " . $this->session_table . "
WHERE session_id = '" . $session_id . "'";
$session_value = $row['session_value'];
return $session_value;
} else {
return false;
}
}
/**
* Zapisywanie danych sesyjnych
* @param string $session_id Identyfikator sesji
* @param string $session_value Wartości sesyjne
* @return bool
* @access private
*/
function _write($session_id, $session_value)
{
$sql_query = "INSERT INTO " . $this->session_table . " (session_id, session_start, session_time, session_value)
VALUES ('" . $session_id . "', " . $session_start . ", " . $session_time . ", '" . $session_value . "')";
if ($result) {
return true;
} else {
$sql_query = "UPDATE " . $this->session_table . "
SET session_time = " . $session_time . ", session_value = '" . $session_value . "'
WHERE session_id = '" . $session_id . "'";
if ($result) {
return true;
} else {
return false;
}
}
}
/**
* Usuwanie danych sesyjnych
* @param string $session_id Identyfikator sesji
* @return bool
* @access private
*/
function _destroy($session_id)
{
$sql_query = "DELETE FROM " . $this->session_table . "
WHERE session_id = '" . $session_id . "'";
if ($result) {
return true;
} else {
return false;
}
}
/**
* "Garbage collection" - Usuwanie niepotrzebnych danych sesyjnych
* @param in $session_lifetime Identyfikator sesji
* @return bool
* @access private
*/
function _gc($session_lifetime) {
$session_lifetime = time() - $this->session_lifetime; $sql_query = "DELETE FROM ".$this->session_table." WHERE session_time < ".time() - $session_lifetime; if ($result) { return true; } else { return false;}
}
}
?>
i ja wywołuje go tak zgodnie z przykładem jaki znalazłem
<?php
// Tworzenie obiektu zarządzania sesją
/**
* Nazwa tabeli, w której przechowywane są dane sesyjne
*/
$session_table = "session";
/**
* Czas trwania sesji po upływie którego nieaktywne sesje zostają
* usunięte
*/
$session_lifetime = 300;
// Tworzenie obiektu zarządzania sesją
$session = new Session($config, $session_table, $session_lifetime);
// Zastępowanie domyślnych funkcji metodami sesji
session_set_save_handler (array(&$session, '_open'),array(&$session, '_close'),array(&$session, '_read'),array(&$session, '_write'),array(&$session, '_destroy'),array(&$session, '_gc'));
// Zaczynamy sesje i sprawdzamy, czy ktos nie probuje podrobic identyfikatora sesji albo go nie ukradl
?>
Zapisuje sessie do bazy MySql ale po zalogowaniu od razu mi niszczy sessie i wylogowuje mnie
mam taki skrypt logowania
<?php
function Login() {
// Usuwanie sessi
unset($_SESSION['UserBad']); unset($_SESSION['PassBad']); // Obliczamy nasz skomplikowany hash hasla i pobieramy nazwe uzytkownika
$Pass = $this->GenerateHash($_POST['password']);
// Sprawdzamy czy takowy istnieje, jesli tak - logujemy
$query = sprintf("SELECT `id`,`typ`,`login`,`ost_logowanie`,`ip`,`nr_karty`,`licznik` FROM `uzytkownicy` WHERE `login` = '%s' AND `haslo` = '%s' LIMIT 0,1", $Username, $Pass);
$result = $SQL->Query($query);
if ($SQL->Rows($result) > 0) {
$data = $SQL->DBArray($result);
//Zwiekszanie licznika
$data['licznik']++;
// Uaktualniamy ostatnie logowanie i IP
$query = sprintf("UPDATE `uzytkownicy` SET `ost_logowanie` = CURRENT_TIMESTAMP, `ip` = '%s',`licznik`= %s
WHERE `login` = '%s' AND `haslo` = '%s' AND `id` = %s",
$_SERVER['REMOTE_ADDR'],$data['licznik'], $Username, $Pass, $data['id']);
$SQL->Query($query);
// Informujemy system, ze uzytkownik sie zalogowal...
$_SESSION['zalogowany'] = true;
} else {
$error = "Niepoprawne dane!";
}
}
?>
Po zalogowaniu jak wyświetlę wszystkie seesie to mam
Array ( [inicjuj] => 1 [ip] => 217.97.185.6 [UserData] => Array ( [id] => 1 [typ] => a [login] => admin [ost_logowanie] => 2009-03-05 19:53:58 [ip] => 217.97.185.6 [nr_karty] => 0 [licznik] => 112 ) [zalogowany] => 1 )
ale jak próbuje wczytać jakiś plik który przed otwarciem sprawdza co jest w $_SESSION['zalogowany'] to sessi już nie ma w ogóle żadnej nie ma wszystkie są usunięte.
Napisałem prościej, napisałem tak
<?php
?>
Ten post edytował kilofmar 11.03.2009, 09:13:39