

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menggunakan penangan sesi DynamoDB dengan Versi 3 AWS SDK untuk PHP
<a name="service_dynamodb-session-handler"></a>

DynamoDB Session Handler adalah penangan sesi kustom untuk PHP yang memungkinkan pengembang menggunakan Amazon DynamoDB sebagai toko sesi. Menggunakan DynamoDB untuk penyimpanan sesi mengurangi masalah yang terjadi dengan penanganan sesi dalam aplikasi web terdistribusi dengan memindahkan sesi dari sistem file lokal dan ke lokasi bersama. DynamoDB cepat, terukur, mudah diatur, dan menangani replikasi data Anda secara otomatis.

DynamoDB Session Handler menggunakan `session_set_save_handler()` fungsi untuk menghubungkan operasi DynamoDB ke fungsi [sesi asli PHP untuk memungkinkan penurunan](http://www.php.net/manual/en/ref.session.php) penggantian yang sebenarnya. Ini termasuk dukungan untuk fitur seperti penguncian sesi dan pengumpulan sampah, yang merupakan bagian dari penangan sesi default PHP.

Untuk informasi selengkapnya tentang layanan DynamoDB, lihat beranda Amazon [DynamoDB](https://aws.amazon.com/dynamodb/).

## Penggunaan dasar
<a name="basic-usage"></a>

### Langkah 1: Daftarkan handler
<a name="step-1-register-the-handler"></a>

Pertama, buat instance dan daftarkan session 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();
```

### Langkah 2. Buat tabel untuk menyimpan sesi Anda
<a name="create-a-table-for-storing-your-sessions"></a>

Sebelum Anda benar-benar dapat menggunakan pengendali sesi, Anda perlu membuat tabel untuk menyimpan sesi. Anda dapat melakukan ini sebelumnya dengan menggunakan [AWS Konsol untuk Amazon DynamoDB](https://console.aws.amazon.com/dynamodb/home), atau dengan menggunakan. AWS SDK untuk PHP

Saat membuat tabel ini gunakan 'id' sebagai nama kunci utama. Juga disarankan untuk menyiapkan atribut [Time To Live menggunakan atribut](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/TTL.html) 'expires' untuk mendapatkan keuntungan dari pengumpulan sesi sampah otomatis.

### Langkah 3. Gunakan sesi PHP seperti biasanya
<a name="step-3-use-php-sessions-as-you-normally-would"></a>

Setelah penangan sesi terdaftar dan tabel ada, Anda dapat menulis dan membaca dari sesi menggunakan `$_SESSION` superglobal, seperti yang biasa Anda lakukan dengan penangan sesi default PHP. DynamoDB Session Handler merangkum dan mengabstraksi interaksi dengan DynamoDB dan memungkinkan Anda untuk hanya menggunakan fungsi sesi asli PHP dan antarmuka.

```
// 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();
```

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

Anda dapat mengonfigurasi perilaku pengendali sesi menggunakan opsi berikut. Semua opsi bersifat opsional, tetapi pastikan untuk memahami apa defaultnya.

** `table_name` **  
Nama tabel DynamoDB untuk menyimpan sesi. Ini default ke. `'sessions'`

** `hash_key` **  
Nama kunci hash dalam tabel sesi DynamoDB. Ini default ke. `'id'`

** `data_attribute` **  
Nama atribut dalam tabel sesi DynamoDB tempat data sesi disimpan. Ini default ke. `'data'`

** `data_attribute_type` **  
Jenis atribut dalam tabel sesi DynamoDB di mana data sesi disimpan. Ini default ke`'string'`, tetapi secara opsional dapat diatur ke. `'binary'`

** `session_lifetime` **  
Masa pakai sesi yang tidak aktif sebelum itu harus menjadi sampah yang dikumpulkan. Jika tidak disediakan, nilai seumur hidup aktual yang akan digunakan adalah`ini_get('session.gc_maxlifetime')`.

** `session_lifetime_attribute` **  
Nama atribut dalam tabel sesi DynamoDB di mana waktu kedaluwarsa sesi disimpan. Ini default ke. `'expires'`

** `consistent_read` **  
Apakah pengendali sesi harus menggunakan pembacaan yang konsisten untuk `GetItem` operasi. Nilai default-nya `true`.

** `locking` **  
Apakah akan menggunakan penguncian sesi. Nilai default-nya `false`.

** `batch_config` **  
Konfigurasi yang digunakan untuk menghapus batch selama pengumpulan sampah. Opsi ini diteruskan langsung ke objek [DynamoDB WriteRequestBatch](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.DynamoDb.WriteRequestBatch.html). Memicu pengumpulan sampah secara manual melalui`SessionHandler::garbageCollect()`.

** `max_lock_wait_time` **  
Waktu maksimum (dalam detik) bahwa pengendali sesi harus menunggu untuk mendapatkan kunci sebelum menyerah. Default untuk adalah `10` dan hanya digunakan dengan penguncian sesi.

** `min_lock_retry_microtime` **  
Waktu minimum (dalam mikrodetik) bahwa pengendali sesi harus menunggu di antara upaya untuk mendapatkan kunci. Defaultnya adalah `10000` dan hanya digunakan dengan penguncian sesi.

** `max_lock_retry_microtime` **  
Waktu maksimum (dalam mikrodetik) bahwa pengendali sesi harus menunggu di antara upaya untuk memperoleh kunci. Defaultnya adalah `50000` dan hanya digunakan dengan penguncian sesi.

Untuk mengonfigurasi Session Handler, tentukan opsi konfigurasi saat Anda membuat instance handler. Kode berikut adalah contoh dengan semua opsi konfigurasi yang ditentukan.

```
$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,
]);
```

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

[Selain biaya penyimpanan data dan transfer data, biaya yang terkait dengan penggunaan DynamoDB dihitung berdasarkan kapasitas throughput yang disediakan pada tabel Anda (lihat detail harga Amazon DynamoDB).](https://aws.amazon.com/dynamodb/pricing/) Throughput diukur dalam satuan kapasitas tulis dan kapasitas baca. Beranda Amazon DynamoDB mengatakan:

Satuan kapasitas baca mewakili satu pembacaan yang sangat konsisten per detik (atau dua pembacaan yang akhirnya konsisten per detik) untuk item sebesar 4 KB. Satuan kapasitas tulis mewakili satu tulis per detik untuk item sebesar 1 KB.

Pada akhirnya, throughput dan biaya yang diperlukan untuk tabel sesi Anda akan berkorelasi dengan lalu lintas dan ukuran sesi yang Anda harapkan. Tabel berikut menjelaskan jumlah operasi baca dan tulis yang dilakukan pada tabel DynamoDB Anda untuk setiap fungsi sesi.


****  

|  |  | 
| --- |--- |
|  Baca melalui `session_start()`   |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/sdk-for-php/v3/developer-guide/service_dynamodb-session-handler.html)  | 
|  Baca melalui `session_start()` (Menggunakan penguncian sesi)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/sdk-for-php/v3/developer-guide/service_dynamodb-session-handler.html)  | 
|  Menulis melalui `session_write_close()`   |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/sdk-for-php/v3/developer-guide/service_dynamodb-session-handler.html)  | 
|  Hapus melalui `session_destroy()`   |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/sdk-for-php/v3/developer-guide/service_dynamodb-session-handler.html)  | 
|  Pengumpulan Sampah  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/sdk-for-php/v3/developer-guide/service_dynamodb-session-handler.html)  | 

## Penguncian sesi
<a name="ddbsh-session-locking"></a>

DynamoDB Session Handler mendukung penguncian sesi pesimis untuk meniru perilaku pengendali sesi default PHP. Secara default, DynamoDB Session Handler memiliki *fitur ini dimatikan* karena dapat menjadi hambatan kinerja dan menaikkan biaya, terutama ketika aplikasi mengakses sesi saat menggunakan permintaan Ajax atau iframe. Pertimbangkan dengan cermat apakah aplikasi Anda memerlukan penguncian sesi sebelum mengaktifkannya.

Untuk mengaktifkan penguncian sesi, setel `'locking'` opsi ke `true` saat Anda membuat instance. `SessionHandler`

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

## Pengumpulan sampah
<a name="ddbsh-garbage-collection"></a>

Siapkan atribut TTL di tabel DynamoDB Anda, menggunakan atribut 'kedaluwarsa'. Ini akan secara otomatis mengumpulkan sampah sesi Anda dan menghindari kebutuhan untuk mengumpulkan sampah sendiri.

Atau, DynamoDB Session Handler mendukung pengumpulan sampah sesi dengan menggunakan serangkaian dan operasi. `Scan` `BatchWriteItem` Karena sifat dari bagaimana `Scan` operasi bekerja, dan untuk menemukan semua sesi kedaluwarsa dan menghapusnya, proses pengumpulan sampah dapat memerlukan banyak throughput yang disediakan.

Untuk alasan ini, kami tidak mendukung pengumpulan sampah otomatis. Praktik yang lebih baik adalah menjadwalkan pengumpulan sampah terjadi selama waktu off-peak ketika ledakan throughput yang dikonsumsi tidak akan mengganggu sisa aplikasi. Misalnya, Anda dapat memiliki pekerjaan cron malam memicu skrip untuk menjalankan pengumpulan sampah. Skrip ini perlu melakukan sesuatu seperti berikut ini.

```
$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();
```

Anda juga dapat menggunakan `'before'` opsi di dalam `'batch_config'` untuk memperkenalkan penundaan pada `BatchWriteItem` operasi yang dilakukan oleh proses pengumpulan sampah. Ini akan meningkatkan jumlah waktu yang dibutuhkan pengumpulan sampah untuk menyelesaikan, tetapi ini dapat membantu Anda menyebarkan permintaan yang dibuat oleh DynamoDB Session Handler untuk membantu Anda tetap dekat dengan atau dalam kapasitas throughput yang disediakan selama pengumpulan sampah.

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

$sessionHandler->garbageCollect();
```

## Praktik terbaik
<a name="best-practices"></a>

1. Buat tabel sesi Anda di AWS Wilayah yang secara geografis paling dekat dengan atau di Wilayah yang sama dengan server aplikasi Anda. Ini memastikan latensi terendah antara aplikasi Anda dan database DynamoDB.

1. Pilih kapasitas throughput yang disediakan dari tabel sesi Anda dengan hati-hati. Pertimbangkan lalu lintas yang diharapkan ke aplikasi Anda dan ukuran sesi yang diharapkan. Atau gunakan mode Read/Write kapasitas 'On Demand' untuk meja Anda.

1. Pantau throughput yang Anda konsumsi melalui AWS Management Console atau dengan Amazon CloudWatch, dan sesuaikan pengaturan throughput Anda sesuai kebutuhan untuk memenuhi permintaan aplikasi Anda.

1. Jaga ukuran sesi Anda kecil (idealnya kurang dari 1 KB). Sesi kecil berkinerja lebih baik dan membutuhkan kapasitas throughput yang lebih sedikit.

1. Jangan gunakan penguncian sesi kecuali aplikasi Anda membutuhkannya.

1. Alih-alih menggunakan pemicu pengumpulan sampah sesi bawaan PHP, jadwalkan pengumpulan sampah Anda melalui pekerjaan cron, atau mekanisme penjadwalan lainnya, untuk dijalankan selama jam-jam sibuk. Gunakan `'batch_config'` opsi untuk keuntungan Anda.

## Izin IAM yang diperlukan
<a name="required-iam-permissions"></a>

[Untuk menggunakan SessionHhandler DynamoDB, kredenal yang [dikonfigurasi harus memiliki izin untuk menggunakan tabel DynamoDB yang Anda](guide_credentials.md) buat pada langkah sebelumnya.](#create-a-table-for-storing-your-sessions) Kebijakan IAM berikut berisi izin minimum yang Anda butuhkan. Untuk menggunakan kebijakan ini, ganti nilai Resource dengan Amazon Resource Name (ARN) dari tabel yang Anda buat sebelumnya. Untuk informasi selengkapnya tentang membuat dan melampirkan kebijakan IAM, lihat [Mengelola Kebijakan IAM di Panduan](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html) Pengguna IAM.

------
#### [ 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"
        }
    ]
}
```

------