session_set_save_handler

(PHP 4 )

session_set_save_handler --  Ustawia funkcje u┐ytkownika do przechowywania sesji

Opis

bool session_set_save_handler ( string otw≤rz, string zamknij, string czytaj, string zapisz, string niszcz, string gc)

session_set_save_handler() ustawia funkcje u┐ytkownika do obs│ugi przechowywania sesji, kt≤re u┐ywane sa do zapisywania i odtwarzania danych skojarzonych z sesj▒. Jest to bardzo przydatne je╢li preferowany jest spos≤b przechowywania sesji inny ni┐ ten, kt≤ry jest dostarczany z PHP, np. przechowywanie danych sesji w lokalnej bazie danych. Zwraca TRUE w przypadku sukcesu, FALSE w przypadku pora┐ki.

Notatka: W swoim pliku php.ini musisz ustawiµ opcjΩ konfiguracji session.save_handler na user aby session_set_save_handler() zadzia│a│o.

Notatka: Procedura obs│ugi "zapisz" nie bΩdzie wywo│ana dop≤ki strumie± wyj╢ciowy jest otwarty. W zwi▒zku z tym, wyj╢cie instrukcji debugowania zawartych w procedurze "zapisz" nigdy nie bΩdzie widoczne w oknie przegl▒darki. Je╢li konieczne jest wyj╢cie debugowania, sugerowane jest zapisanie tego wyj╢cia do pliku.

Notatka: Procedura obs│ugi zapisywania nei jest wywo│ywana je╢li sesja nie zawiera danych. Dotyczty to tak┐e sytuacji, kiedy zarejestrowane zmienne s▒ puste. R≤┐ni siΩ to od domy╢lnej obs│ugi sesji opartej na plikach, kt≤ra tworzy tak┐e puste pliki sesji.

Poni┐szy przyk│ad opisuje metodΩ przechowywania danych sesyjnych w plikach, podobn▒ do tej obs│ugiwanej wewnΩtrznie przez PHP. Przyk│ad ten mo┐e byµ │atwo rozszerzony aby m≤c u┐yµ go z twoj▒ ulubion▒ baz▒ danych obs│ugiwan▒ przez PHP.

Funkcja czytaj▒ca zawsze musi zwracaµ ci▒g aby procedura obs│ugi dzia│a│a zgodnie z przewidywaniami. Zwr≤µ pusty ci▒g je╢li nie ma ┐adnych danych do odczytania. Warto╢ci zwracane przez inne procedury obs│ugi s▒ konwertowane na wyra┐enia logiczne. TRUE dla sukcesu, FALSE dla niepowodzenia.

Przyk│ad 1. Przyk│ad session_set_save_handler()

<?php

function open ($save_path, $session_name) {
  global $sess_save_path, $sess_session_name;
       
  $sess_save_path = $save_path;
  $sess_session_name = $session_name;
  return(true);
}

function close() {
  return(true);
}

function read ($id) {
  global $sess_save_path, $sess_session_name;

  $sess_file = "$sess_save_path/sess_$id";
  if ($fp = @fopen($sess_file, "r")) {
    $sess_data = fread($fp, filesize($sess_file));
    return($sess_data);
  } else {
  return(""); // Zawsze musi zwracaµ ""
  }

}

function write ($id, $sess_data) {
  global $sess_save_path, $sess_session_name;

  $sess_file = "$sess_save_path/sess_$id";
  if ($fp = @fopen($sess_file, "w")) {
    return(fwrite($fp, $sess_data));
  } else {
    return(false);
  }

}

function destroy ($id) {
  global $sess_save_path, $sess_session_name;
       
  $sess_file = "$sess_save_path/sess_$id";
  return(@unlink($sess_file));
}

/*********************************************
 * UWAGA: Musisz sam zaimplementowaµ obs│ugΩ *
 * zbierania ╢mieci (gc)                     *
 *********************************************/
function gc ($maxlifetime) {
  return true;
}

session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");

session_start();

// dalej normalnie u┐ywaj sesji

?>