

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Verwenden des DynamoDB-Sitzungshandlers mit Version 3 AWS SDK für PHP
<a name="service_dynamodb-session-handler"></a>

Der DynamoDB Session Handler ist ein benutzerdefinierter Session-Handler für PHP, der es Entwicklern ermöglicht, Amazon DynamoDB als Sitzungsspeicher zu verwenden. Die Verwendung von DynamoDB als Sitzungsspeicher behebt Probleme, die bei der Sitzungsverarbeitung in einer verteilten Webanwendung auftreten, indem Sitzungen aus dem lokalen Dateisystem an einen gemeinsam genutzten Speicherort verschoben werden. DynamoDB ist schnell, skalierbar, einfach einzurichten und wickelt die Replikation Ihrer Daten automatisch ab.

Der DynamoDB-Sitzungshandler verwendet die `session_set_save_handler()` Funktion, um DynamoDB-Operationen in die [systemeigenen Sitzungsfunktionen](http://www.php.net/manual/en/ref.session.php) von PHP einzubinden, um einen echten Ersatz zu ermöglichen. Dies beinhaltet die Unterstützung von Funktionen wie Sitzungssperren und Speicherbereinigung, die Teil des standardmäßigen Sitzungshandlers von PHP sind.

Weitere Informationen zum DynamoDB-Service finden Sie auf der [Amazon DynamoDB DynamoDB-Homepage](https://aws.amazon.com/dynamodb/).

## Grundlegende Verwendung
<a name="basic-usage"></a>

### Schritt 1: Registrieren Sie den Handler
<a name="step-1-register-the-handler"></a>

Zuerst instanziieren und registrieren Sie den Sitzungs-Handler.

```
use Aws\DynamoDb\SessionHandler;

$dynamoDb = new Aws\DynamoDb\DynamoDbClient([
    'region'=>'us-east-1'  // Since version 3.277.10 of the SDK, 
]);                        // the 'version' parameter defaults to 'latest'.

$sessionHandler = SessionHandler::fromClient($dynamoDb, [
    'table_name' => 'sessions'
]);

$sessionHandler->register();
```

### Schritt 2. Erstellen Sie eine Tabelle zum Speichern Ihrer Sitzungen
<a name="create-a-table-for-storing-your-sessions"></a>

Bevor Sie den Sitzungs-Handler tatsächlich verwenden können, müssen Sie eine Tabelle erstellen, in der die Sitzungen gespeichert werden. Sie können dies im Voraus tun, indem Sie die [AWS Konsole für Amazon DynamoDB](https://console.aws.amazon.com/dynamodb/home) verwenden oder die. AWS SDK für PHP

Beim Erstellen dieser Tabelle wählen Sie „id“ als Name des Primärschlüssels. Außerdem wird empfohlen, ein [Time to Live-Attribut](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/TTL.html) einzurichten, und zwar anhand des Attributs „expires“. So profitieren Sie von der Sitzungsspeicherbereinigung.

### Schritt 3. Verwenden Sie PHP-Sitzungen wie gewohnt
<a name="step-3-use-php-sessions-as-you-normally-would"></a>

Sobald der Sitzungshandler registriert ist und die Tabelle existiert, können Sie mit der superglobalen Variable `$_SESSION` in die Sitzung schreiben und aus ihr lesen, genau wie Sie es normalerweise mit dem Standard-Sitzungshandler von PHP tun. Der DynamoDB Session Handler kapselt und abstrahiert die Interaktionen mit DynamoDB und ermöglicht es Ihnen, einfach die nativen Sitzungsfunktionen und die Schnittstelle von PHP zu verwenden.

```
// Start the session
session_start();

// Alter the session data
$_SESSION['user.name'] = 'jeremy';
$_SESSION['user.role'] = 'admin';

// Close the session (optional, but recommended)
session_write_close();
```

## Konfiguration
<a name="configuration"></a>

Sie können das Verhalten des Sitzungs-Handlers mithilfe der folgenden Optionen konfigurieren. Alle Optionen sind optional, aber Sie sollten sicher sein, dass Sie die Standardeinstellungen kennen.

** `table_name` **  
Der Name der DynamoDB-Tabelle, in der die Sitzungen gespeichert werden sollen. Der Standardwert ist `'sessions'`.

** `hash_key` **  
Der Name des Hash-Schlüssels in der DynamoDB-Sitzungstabelle. Der Standardwert ist `'id'`.

** `data_attribute` **  
Der Name des Attributs in der DynamoDB-Sitzungstabelle, in der die Sitzungsdaten gespeichert sind. Der Standardwert ist `'data'`.

** `data_attribute_type` **  
Der Typ des Attributs in der DynamoDB-Sitzungstabelle, in der die Sitzungsdaten gespeichert sind. Dies ist standardmäßig `'string'`, kann aber optional als `'binary'` festgelegt werden.

** `session_lifetime` **  
Die Lebensdauer einer inaktiven Sitzung, bevor der Speicher bereinigt werden soll. Wenn sie nicht angegeben ist, wird `ini_get('session.gc_maxlifetime')` als Wert für die Lebensdauer verwendet.

** `session_lifetime_attribute` **  
Der Name des Attributs in der DynamoDB-Sitzungstabelle, in dem die Ablaufzeit der Sitzung gespeichert ist. Der Standardwert ist `'expires'`.

** `consistent_read` **  
Ob der Sitzungs-Handler konsistente Lesevorgänge für die `GetItem`-Operation verwenden soll. Der Standardwert ist `true`.

** `locking` **  
Ob Sitzungssperren verwendet werden sollen. Der Standardwert ist `false`.

** `batch_config` **  
Konfiguration zum Stapellöschen bei der Speicherbereinigung. Diese Optionen werden direkt an [DynamoDB-Objekte WriteRequestBatch](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.DynamoDb.WriteRequestBatch.html) übergeben. Lösen Sie die Speicherbereinigung manuell über `SessionHandler::garbageCollect()` aus.

** `max_lock_wait_time` **  
Maximale Zeit (in Sekunden), wie lange der Sitzungs-Handler warten soll, bis ihm eine Sperre erteilt wird, bevor er aufgibt. Die Standardwert ist `10` und wird nur für die Sitzungssperre verwendet.

** `min_lock_retry_microtime` **  
Minimale Zeit (in Mikrosekunden), wie lange der Sitzungs-Handler zwischen den Versuchen warten soll, eine Sperre zu erhalten. Die Standardwert ist `10000` und wird nur für die Sitzungssperre verwendet.

** `max_lock_retry_microtime` **  
Maximale Zeit (in Mikrosekunden), wie lange der Sitzungs-Handler zwischen den Versuchen warten soll, eine Sperre zu erhalten. Die Standardwert ist `50000` und wird nur für die Sitzungssperre verwendet.

Zur Konfiguration des Session Handlers geben Sie bei der Instanziierung des Handlers die Konfigurationsoptionen an. Der folgende Code ist ein Beispiel mit allen Konfigurationsoptionen.

```
$sessionHandler = SessionHandler::fromClient($dynamoDb, [
    'table_name'                    => 'sessions',
    'hash_key'                      => 'id',
    'data_attribute'                => 'data',
    'data_attribute_type'           => 'string',
    'session_lifetime'              => 3600,
    'session_lifetime_attribute'    => 'expires',
    'consistent_read'               => true,
    'locking'                       => false,
    'batch_config'                  => [],
    'max_lock_wait_time'            => 10,
    'min_lock_retry_microtime'      => 5000,
    'max_lock_retry_microtime'      => 50000,
]);
```

## Preisgestaltung
<a name="pricing"></a>

Abgesehen von den Gebühren für Datenspeicherung und Datenübertragung werden die mit der Nutzung von DynamoDB verbundenen Kosten auf der Grundlage der bereitgestellten Durchsatzkapazität Ihrer Tabelle berechnet (siehe Preisdetails zu [Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing/)). Der Durchsatz wird in Einheiten der Schreib- und Lesekapazität gemessen. Auf der Amazon DynamoDB DynamoDB-Homepage heißt es:

Eine Lesekapazitätseinheit entspricht einem Strongly Consistent-Lesevorgang pro Sekunde oder zwei Eventually Consistent-Lesevorgängen pro Sekunde für Elemente mit einer Größe von bis zu 4 KB. Eine Schreibkapazitätseinheit entspricht einem Schreibvorgang pro Sekunde für Elemente von bis zu 1 KB.

Letztendlich korrelieren der Durchsatz und die Kosten für Ihre Sitzungstabelle mit dem erwarteten Datenverkehr und der Sitzungsgröße. In der folgenden Tabelle wird die Anzahl der Lese- und Schreiboperationen erläutert, die in Ihrer DynamoDB-Tabelle für jede der Sitzungsfunktionen ausgeführt werden.


****  

|  |  | 
| --- |--- |
|  Lesen über `session_start()`   |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/sdk-for-php/v3/developer-guide/service_dynamodb-session-handler.html)  | 
|  Lesen über `session_start()` (mit Sitzungssperre)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/sdk-for-php/v3/developer-guide/service_dynamodb-session-handler.html)  | 
|  Schreiben über `session_write_close()`   |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/sdk-for-php/v3/developer-guide/service_dynamodb-session-handler.html)  | 
|  Löschen über `session_destroy()`   |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/sdk-for-php/v3/developer-guide/service_dynamodb-session-handler.html)  | 
|  Speicherbereinigung  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/sdk-for-php/v3/developer-guide/service_dynamodb-session-handler.html)  | 

## Sperren von Sitzungen
<a name="ddbsh-session-locking"></a>

Der DynamoDB Session Handler unterstützt pessimistisches Sperren von Sitzungen, um das Verhalten des Standard-Session-Handlers von PHP nachzuahmen. Standardmäßig ist diese Funktion im DynamoDB-Sitzungshandler *deaktiviert*, da sie zu einem Leistungsengpass werden und die Kosten in die Höhe treiben kann, insbesondere wenn eine Anwendung über Ajax-Anfragen oder Iframes auf die Sitzung zugreift. Überlegen Sie sorgfältig, ob Ihre Anwendung eine Sitzungssperre benötigt, bevor Sie diese aktivieren.

Um die Sitzungssperre zu aktivieren, setzen Sie die `'locking'`-Option auf `true`, wenn Sie den `SessionHandler` instanziieren.

```
$sessionHandler = SessionHandler::fromClient($dynamoDb, [
    'table_name' => 'sessions',
    'locking'    => true,
]);
```

## Müllabfuhr
<a name="ddbsh-garbage-collection"></a>

Richten Sie in Ihrer DynamoDB-Tabelle mit dem Attribut „expires“ ein TTL-Attribut ein. Dies bereinigt Ihre Sitzungen automatisch und erspart Ihnen, sie selbst entfernen zu müssen.

Alternativ unterstützt der DynamoDB-Sitzungshandler die Sitzungsbereinigung mithilfe einer Reihe von `Scan` Und-Operationen. `BatchWriteItem` Aufgrund der Art, wie die`Scan`-Operation funktioniert, und um alle abgelaufenen Sitzungen zu finden und zu löschen, kann der Speicherbereinigungsprozess eine Menge Durchsatz erfordern.

Aus diesem Grund unterstützen wir keine automatisierte Speicherbereinigung. Eine bessere Praxis ist es, die Speicherbereinigung so zu planen, dass sie außerhalb der Hauptverkehrszeiten stattfindet, in der eine Erhöhung des verbrauchten Durchsatzes den Rest der Anwendung nicht stört. Beispielsweise könnte ein nächtlicher Cron-Job ein Skript zur Ausführung der Speicherbereinigung auslösen. Dieses Skript müsste etwa Folgendes erledigen.

```
$sessionHandler = SessionHandler::fromClient($dynamoDb, [
    'table_name'   => 'sessions',
    'batch_config' => [
        'batch_size' => 25,
        'before' => function ($command) {
            echo "About to delete a batch of expired sessions.\n";
        }
    ]
]);

$sessionHandler->garbageCollect();
```

Sie können auch die `'before'`-Option mit `'batch_config'` verwenden, um Verzögerungen für die `BatchWriteItem`-Operationen anzuwenden, die von der Speicherbereinigung ausgeführt werden. Dadurch verlängert sich die Zeit, die für die Garbage-Collection benötigt wird, aber es kann Ihnen helfen, die Anfragen des DynamoDB-Sitzungshandlers so zu verteilen, dass Sie während der Garbage-Collection in der Nähe oder innerhalb Ihrer bereitgestellten Durchsatzkapazität bleiben.

```
$sessionHandler = SessionHandler::fromClient($dynamoDb, [
    'table_name'   => 'sessions',
    'batch_config' => [
        'before' => function ($command) {
            $command['@http']['delay'] = 5000;
        }
    ]
]);

$sessionHandler->garbageCollect();
```

## Best Practices
<a name="best-practices"></a>

1. Erstellen Sie Ihre Sitzungstabelle in einer AWS Region, die Ihren Anwendungsservern geografisch am nächsten liegt oder sich in derselben Region wie diese befindet. Dadurch wird die niedrigste Latenz zwischen Ihrer Anwendung und der DynamoDB-Datenbank gewährleistet.

1. Wählen Sie die bereitgestellte Durchsatzkapazität für Ihre Sitzungstabelle sehr sorgfältig aus. Berücksichtigen Sie den erwarteten Datenverkehr zu Ihrer Anwendung und die erwartete Größe Ihrer Sitzungen. Verwenden Sie alternativ den Read/Write Kapazitätsmodus „On Demand“ für Ihre Tabelle.

1. Überwachen Sie Ihren verbrauchten Durchsatz über die AWS Management Console oder mit Amazon CloudWatch und passen Sie Ihre Durchsatzeinstellungen nach Bedarf an die Anforderungen Ihrer Anwendung an.

1. Halten Sie die Größe Ihrer Sitzungen klein (im Idealfall weniger als 1 KB). Kleine Sitzungen sind leistungsfähiger und erfordern weniger Durchsatzkapazität.

1. Verwenden Sie keine Sitzungssperren, es sei denn, Ihre Anwendung benötigt sie.

1. Anstatt die eingebauten Auslöser für die Speicherbereinigung von Sitzungen in PHP zu verwenden, planen Sie Ihre Speicherbereinigung über einen Cron-Job oder einen anderen Scheduling-Mechanismus so ein, dass sie außerhalb der Stoßzeiten stattfindet. Nutzen Sie die `'batch_config'`-Option.

## Erforderliche IAM-Berechtigungen
<a name="required-iam-permissions"></a>

Um DynamoDB verwenden zu können SessionHhandler, müssen Ihre [konfigurierten Anmeldeinformationen](guide_credentials.md) berechtigt sein, die DynamoDB-Tabelle zu verwenden, die [Sie in einem vorherigen Schritt erstellt](#create-a-table-for-storing-your-sessions) haben. Die folgende IAM-Richtlinie enthält die Mindestberechtigungen, die Sie benötigen. Um diese Richtlinie zu verwenden, ersetzen Sie den Ressourcenwert durch den Amazon-Ressourcennamen (ARN) der Tabelle, die Sie zuvor erstellt haben. Weitere Informationen zum Erstellen und Anhängen von IAM-Richtlinien finden Sie unter [Verwaltung von IAM-Richtlinien](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html) im IAM-Benutzerhandbuch.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SessionHandler",
            "Action": [
                "dynamodb:GetItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Scan",
                "dynamodb:BatchWriteItem"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/table-name"
        }
    ]
}
```

------