This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
khosb/includes/kohana/modules/userguide/guide/nl/using.sessions.md
2011-05-03 09:49:01 +10:00

10 KiB
Raw Blame History

Gebruik van Sessies en Cookies

Kohana biedt een paar classes die het gemakkelijk maken om te werken met cookies en sessies. Op een hoog niveau, zowel sessies en cookies geven dezelfde functionaliteit. Ze laten de ontwikkelaar toe om tijdelijke of blijvende informatie over een specifieke klant voor later op te slaan.

Cookies moeten worden gebruikt voor de opslag van niet-private gegevens die persistent is voor een lange periode van tijd. Bijvoorbeeld het opslaan van een gebruikers-id of een taalvoorkeur. Gebruik de [Cookie] class voor het verkrijgen en instellen van cookies.

[!!] Kohana gebruikt "ondertekende" cookies. Elke cookie die wordt opgeslagen wordt gecombineerd met een veilige hash om een wijziging van de cookie te voorkomen. Deze hash wordt gegenereerd met behulp van [Cookie:: salt], die de [Cookie::$salt] property gebruikt. Je moet [deze instelling] (using.configuration) veranderen wanneer je applicatie live staat.

Sessies worden gebruikt voor het opslaan van tijdelijke of prive-gegevens. Zeer gevoelige gegevens moeten worden opgeslagen met behulp van de [Session] class met de "database" of "native" adapters. Bij gebruik van de "cookie"-adapter, moet de sessie altijd worden versleuteld.

[!!] Voor meer informatie over de beste manieren van werken met sessie-variabelen, zie the seven deadly sins of sessions.

Het opslaan, ophalen en verwijderen van gegevens

[Cookie] en [Session] bieden een zeer gelijkaardige API voor het opslaan van gegevens. Het belangrijkste verschil tussen hen is dat sessies benaderd kunnen worden met behulp van een object, en cookies met behulp van een statische class.

De sessie instantie benaderen wordt gedaan met de [Session::instance] methode:

// Verkrijg de sessie instantie
$session = Session::instance();

Bij het gebruik van sessies, kan je alle huidige sessiegegevens krijgen met behulp van de [Session::as_array] methode:

// Verkrijg alle sessiegegevens als een array
$data = $session->as_array();

Je kan dit ook gebruiken om de $_SESSION global te overladen om data te krijgen en in te stellen in verlijkbare manier zoals standaard PHP:

// Overlaad $_SESSION met sessiegegevens
$_SESSION =& $session->as_array();

// Stel de sessiegegevens in
$_SESSION[$key] = $value;

Gegevens opslaan

Het opslaan van sessie- of cookie-gegevens wordt gedaan met behulp van de set-methode:

// Sla sessiegegevens op
$session->set($key, $value);

// Sla cookiegegevens op
Cookie::set($key, $value);

// Sla een gebruikers id op
$session->set('user_id', 10);
Cookie::set('user_id', 10);

Verkrijgen van gegevens

Verkrijgen van sessie- of cookie-gegevens wordt gedaan met behulp van de get-methode:

// Verkrijg sessiegegevens
$data = $session->get($key, $default_value);

// Verkrijg cookiegegevens
$data = Cookie::get($key, $default_value);

// Verkrijg het gebruikers id
$user = $session->get('user_id');
$user = Cookie::get('user_id');

Verwijderen van gegevens

Het verwijderen van sessie- of cookie-gegevens wordt gedaan met behulp van de delete-methode:

// Verwijderen van sessiegegevens
$session->delete($key);

// Verwijderen van cookiegegevens
Cookie::delete($key);

// Verwijder een gebruikers id
$session->delete('user_id');
Cookie::delete('user_id');

Configuratie

Zowel cookies als sessies hebben verschillende configuratie-instellingen die van invloed zijn hoe gegevens worden opgeslagen. Controleer altijd deze instellingen voordat u uw applicatie live zet, omdat veel van die instellingen een rechtstreeks effect zal hebben op de veiligheid van uw applicatie.

Al de cookie instellingen worden verandert met behulp van statische properties. Je kan deze instellingen veranderen in bootstrap.php of door een class extension te gebruiken.

De meest belangrijke instelling is [Cookie::$salt], die wordt gebruikt om veilig te ondertekenen. Deze waarde zou moeten gewijzigd en geheim gehouden worden:

Cookie::$salt = 'Uw geheim is veilig bij mij';

[!!] Door het veranderen van deze waarde zullen alle bestaande cookies niet meer geldig zijn.

Standaard worden cookies bewaard tot het browservenster wordt gesloten. Om een specifieke leeftijd te gebruiken, verander de [Cookie::$expiration] instelling:

// Stel in dat cookies vervallen na <20><>n week
Cookie::$expiration = 604800;

// Alternatief voor het gebruik van getallen, voor meer duidelijkheid
Cookie::$expiration = Date::WEEK;

Het path waarvan de cookie kan worden opgevraagd kan worden beperkt met behulp van de [Cookie::$path] instelling.

// Enkel cookies toelaten wanneer je gaat naar /public/*
Cookie::$path = '/public/';

Het domein waarvan de cookie kan worden geopend kan ook worden beperkt, met behulp van de [Cookie::$domain] instelling.

// Enkel cookies toelaten voor www.example.com
Cookie::$domain = 'www.example.com';

Als u de cookie toegankelijk wilt maken op alle subdomeinen, gebruik dan een punt aan het begin van het domein.

// Cookies toegankelijk maken voor example.com en *.example.com
Cookie::$domain = '.example.com';

Als je de cookie alleen wilt kunnen benaderen via een beveiligde (HTTPS) verbinding, gebruik dan de [Cookie::$secure] instelling.

// Cookies enkel toegangekijk maken via een beveiligde verbinding
Cookie::$secure = TRUE;

// Cookies toegankelijk maken voor elke verbinding
Cookie::$secure = FALSE;

Om te voorkomen dat cookies worden geopend met behulp van Javascript, kunt u de [Cookie::$httponly] instelling aanpassen.

// Maak cookies niet toegankelijk via Javascript
Cookie::$httponly = TRUE;

Sessie Adapters

Bij het maken van of het aanroepen van een instantie van de [Sessie] class kan je kiezen welke sessie adapter je wilt gebruiken. De sessie adapters die beschikbaar zijn voor je:

Native
Slaat sessiegegevens op in de standaard locatie voor uw web server. De opslaglocatie is gedefinieerd door session.save_path in php.ini of gedefinieerd door ini_set.
Database
Slaat de sessiesgegevens op in een database tabel door gebruik te maken van de [Session_Database] class. De [Database] module is vereist.
Cookie
Slaat de sessiegegevens op in een cookie door gebruikt te maken van de [Cookie] class. Sessies hebben een 4KB limiet wanneer je deze adapter gebruikt.

De standaard adapter kan ingesteld worden door de waarde aan te passen van [Session::$default]. De standaard adapter is "native".

[!!] Zoals bij cookies bekent een "lifetime" instelling van "0" dat de sessie zal vervallen bij het sluiten van de het browservenster.

Sessie Adapter Instellingen

Je kan configuratie-instellingen voor elk van de sessie adapters instellen door het cre<72>ren van een sessie configuratiebestand in APPPATH/config/session.php. Het volgende voorbeeld van een configuratie bestand defini<6E>ert alle instellingen voor elke adapter:

return array(
    'native' => array(
        'name' => 'session_name',
        'lifetime' => 43200,
    ),
    'cookie' => array(
        'name' => 'cookie_name',
        'encrypted' => TRUE,
        'lifetime' => 43200,
    ),
    'database' => array(
        'name' => 'cookie_name',
        'encrypted' => TRUE,
        'lifetime' => 43200,
        'group' => 'default',
        'table' => 'table_name',
        'columns' => array(
            'session_id'  => 'session_id',
    		'last_active' => 'last_active',
    		'contents'    => 'contents'
        ),
        'gc' => 500,
    ),
);

Native Adapter

Type Instelling Omschrijving Standaard
string name naam van de sessie "session"
integer lifetime aantal seconden dat de sessie moet bestaan 0
Type Instelling Omschrijving Standaard
string name naam van de cookie om de sessiegegevens op te slaan "session"
boolean encrypted de sessiegegevens coderen met [Encrypt]? FALSE
integer lifetime aantal seconden dat de sessie moet bestaan 0

Database Adapter

Type Instelling Omschrijving Standaard
string group [Database::instance] groep naam "default"
string table de tabelnaam waar de gegevens worden in opgeslagen "sessions"
array columns associatieve array met kolom aliassen array
integer gc 1:x kans dat de garbage collection uitgevoerd wordt 500
string name naam van de cookie om de sessiegegevens op te slaan "session"
boolean encrypted de sessiegegevens coderen met [Encrypt]? FALSE
integer lifetime aantal seconden dat de sessie moet bestaan 0
Tabel Schema

Je moet de sessie-opslag tabel in de database aanmaken. Dit is het standaard schema:

CREATE TABLE  `sessions` (
    `session_id` VARCHAR(24) NOT NULL,
    `last_active` INT UNSIGNED NOT NULL,
    `contents` TEXT NOT NULL,
    PRIMARY KEY (`session_id`),
    INDEX (`last_active`)
) ENGINE = MYISAM;
Tabel kolommen

Je kunt de namen van kolommen aanpassen om overeen te komen met een bestaand database-schema. De standaard waarde is hetzelfde als de key waarde.

session_id
de naam van de "id" kolom
last_active
UNIX timestamp van het laatste tijdstip dat de sessie werd aangepast
contents
sessiongegevens opgeslaan in een serialized string, en optioneel gecodeerd