> For the complete documentation index, see [llms.txt](https://qpapel.papelship.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://qpapel.papelship.com/documentation/tr-documentation/fonksiyonlar/anahtar-dogrulama/oturum-anahtari.md).

# Oturum Anahtarı

Başarılı lisans doğrulamasından sonra oluşturulan aktif oturum token'ını alır.

{% hint style="info" %}
Oturum token'ları, `Authenticate()` başarılı olduğunda otomatik olarak oluşturulur. Kimliği doğrulanmış durumu temsil eden, süre sınırlı JWT'lerdir.
{% endhint %}

***

## İmza (Signature)

```cpp
char* GetToken(QPCTX c);
```

***

## Parametreler

| Parametre | Tür     | Açıklama                            | Zorunlu |
| --------- | ------- | ----------------------------------- | ------- |
| `c`       | `QPCTX` | İstemci bağlam (context) işaretçisi | Evet    |

***

## Dönüş Değeri

**Tür:** `char*`

| Değer                | Açıklama                                              |
| -------------------- | ----------------------------------------------------- |
| `Null olmayan char*` | Geçerli JWT oturum token'ını temsil eden dinamik dize |
| `nullptr`            | Aktif oturum yok (kimlik doğrulanmamış)               |

{% hint style="warning" %}
Döndürülen token dizesi SDK tarafından dinamik olarak tahsis edilmiştir. Bellek sızıntılarını önlemek için, işiniz bittiğinde `qpapel::FreeString(token)` çağrısıyla bu belleği **mutlaka** serbest bırakmanız gerekir.
{% endhint %}

***

## Temel Kullanım Örneği

```cpp
#include <iostream>
#include "qPapelLib.h"

void CheckSession(QPCTX ctx, const std::string& licenseKey) {
    // Önce kimlik doğrulaması yap
    char* sessionToken = qpapel::Authenticate(ctx, licenseKey.c_str());
    
    if (sessionToken != nullptr) {
        std::cout << "[BAŞARILI] Kimlik doğrulandı!" << std::endl;
        
        // GetToken kullanarak oturum token'ını al
        char* token = qpapel::GetToken(ctx);
        if (token != nullptr) {
            std::cout << "Aktif JWT Token'ı: " << token << std::endl;
            
            // Alınan token'ı serbest bırakın!
            qpapel::FreeString(token);
        }
        
        // Kimlik doğrulama token'ını serbest bırakın!
        qpapel::FreeString(sessionToken);
    } else {
        std::cerr << "Kimlik doğrulama başarısız oldu." << std::endl;
    }
}
```

***

## Oturum Token Formatı

Oturum token'ı aşağıdaki şekilde yapılandırılmış bir JSON Web Token'dır (JWT):

```
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsaWNlbnNlX2tleSI6IlhYWFgtWFhYWC1YWFhYLVhYWFgiLCJleHAiOjE3MDYxMjM0NTZ9.signature
```

* **Header (Başlık)**: İmza algoritmasını (`HS256`) belirtir.
* **Payload (Yük)**: Lisans anahtarı detaylarını, son kullanma tarihi epoch zamanını (`exp`) ve bağlantı özelliklerini şifreler.
* **Signature (İmza)**: Bütünlüğü garanti etmek için sunucu tarafında hesaplanan güvenli HMAC.

***

## Güvenlik Hususları

{% hint style="danger" %}
**Oturum Token'larını Gizli Tutun**

* Üretim ortamında oturum token'larını metin dosyalarına veya terminal çıktısına kaydetmeyin.
* Dize tamponundaki belleği hemen temizlemek için her zaman `qpapel::FreeString()` fonksiyonunu çağırın.
* SDK, bu oturum token'ını sonraki isteklere (örneğin string getirme veya PE yükü yükleme gibi) otomatik olarak ekleyecektir; bu nedenle ham token'ı kendiniz nadiren işlemeniz gerekir.
  {% endhint %}
