WinHTTP'da tanımlama bilgisi işleme
HTTP oturum verileri, isteğin veya yanıtın tanımlama bilgisi üst bilgisinde istemci ile sunucu arasında geçirilir. Sunucu, yanıtın Set-cookie üst bilgisinde istemciye tanımlama bilgileri gönderir ve WinHTTP API'si, sunucunun tanımlama bilgisini isteğin tanımlama bilgisi üst bilgisinde sunucuya yeniden gönderir. rfc 2109'da (HTTP Durum Yönetim Mekanizması) açıklanan çerez işleme belirtimleri, WinHTTP'da varsayılan olarak uygulanır. RFC 2964'te açıklanan son çerez işleme belirtimleri WinHTTP tarafından desteklenmez.
WinHTTP, tanımlama bilgisini sunucuların Set-Cookie üst bilgisinden alır ve oturum başına bir önbellekte depolar. Hedefin, tanımlama bilgisinin kaynağıyla eşleştiği durumda, bu tanımlama bilgisi aynı WinHTTP oturumundaki sonraki isteklere yeniden gönderilir. WinHTTP API'si, istekteki her aşama için çerez üst bilgisini yeniden oluşturur.
Aşağıdaki listede WinHTTP istemci uygulamalarının tanımlama bilgilerini işlemek için kullanabileceği çeşitli seçenekler açıklanmaktadır:
- Otomatik Tanımlama Bilgisi İşleme - WinHTTP tanımlama bilgilerini otomatik olarak işler ve istemci uygulaması özel tanımlama bilgisi işleme gerçekleştirmez.
- Otomatik Tanımlama Bilgisi İşlemeyi Devre Dışı Bırak - WinHTTP API'sinde otomatik tanımlama bilgisi işleme devre dışı bırakılır ve tanımlama bilgisi gönderilmez.
- Tüm Tanımlama Bilgilerini el ile belirtin – Otomatik tanımlama bilgisi işleme devre dışı bırakılır ve istemci uygulaması oturumdaki her istek için tüm tanımlama bilgisi üst bilgilerini ekler veya kaldırır.
- Manuel ve Otomatik Çerez İşleme - Otomatik ve manuel çerez işlemeyi birleştirin.
Otomatik tanımlama bilgisi işlemeyi devre dışı bırakma
Tanımlama bilgisi işlemeyi devre dışı bırakmak için, WinHTTP istemci uygulaması WinHttpSetOption işlevini, dwOption parametresini WINHTTP_OPTION_DISABLE_FEATUREolarak ve lpBuffer parametresini WINHTTP_DISABLE_COOKIESolarak ayarlayarak çağırır. hInternet parametresi bir istek tanıtıcısı olmalıdır. Tanımlama bilgisi işleme, önceki isteği göndermiş olan bir istek tanıtıcısında devre dışı bırakıldığında, istemcinin bir sonraki isteği göndermeden önce mevcut istek tanımlama bilgisi üst bilgilerini WinHttpAddRequestHeaders işlevini kullanarak elle kaldırması gerekir. Daha fazla bilgi için bkz. Çerez başlıklarını kaldırma.
Not
otomatik mod devre dışı bırakıldıktan sonra istemci uygulamasının oturumdaki tüm tanımlama bilgilerini ayarlaması gerekir.
Tüm tanımlama bilgilerini elle belirlemek
Otomatik tanımlama bilgisi işlemesi devre dışı bırakıldığında, WinHTTP istemci uygulaması tüm tanımlama bilgilerini manuel olarak belirtme seçeneğine sahiptir. Uygulama, çerezleri manuel olarak ayarlamak için WinHttpAddRequestHeaders'ı çağırır vepwszHeaders parametresinde çerez üst bilgisini belirtir. İstemci uygulaması, isteği yeniden göndermeden önce tüm çerez başlıklarını temizlemelidir.
İstemci uygulaması, istek yeniden yönlendirildiğinde tanımlama bilgisi üst bilgisini de değiştirmelidir. Yeniden yönlendirilen isteklerde çerezi değiştirmek için, istemci, yönlendirme geri çağırma olayına tepki veren WinHttpSetStatusCallback ile bir geri çağırma işlevi belirtir. Geri çağırma işleyicisi, WinHttpAddRequestHeadersçağırarak istekte daha önce gönderilen tanımlama bilgisini temizlemelidir. Tanımlama bilgisi üst bilgilerini kaldırma hakkında daha fazla bilgi için bkz. Tanımlama Bilgisi Üst Bilgilerini Kaldırma.
Elle ve otomatik tanımlama bilgileri yönetimi
WinHTTP istemci uygulamaları, WinHTTP otomatik çerez işleme mekanizmasını el ile çerez işleme ile birleştirebilir. Uygulama, WinHttpSendRequest işlevini göndermeden önce, isteğe otomatik olarak oluşturulan tanımlama bilgisi üst bilgisine özel tanımlama bilgileri ekler. Özel çerez, WinHTTP API'sinin çerezi düzgün bir şekilde önbelleğe alabilmesi için istekteki ilk çerez üst bilgisi olmalıdır. İstemci uygulaması, aynı istek tanıtıcısında bir isteği yeniden göndermeden önce önceki isteklerde gönderilen tanımlama bilgilerini de kaldırmalıdır. Daha fazla bilgi için bakın Çerez Üstbilgilerini Kaldırma.
WinHttpSendRequestçağrıdan önce bir isteğe eklenen tanımlama bilgileri, sonraki WinHttpSendRequest adına gönderilen tüm WinHTTP isteklerine eklenir ve WinHttpReceiveResponseçağrıları. İstek yeniden yönlendirildiğinde istemci uygulamasının tanımlama bilgisi üst bilgisini temizlemesi gerekebilir. Yeniden yönlendirilen isteklerde çerezi temizlemek için istemci, WinHttpSetStatusCallback kullanarak yeniden yönlendirme geri çağırma durumuna yanıt veren bir geri çağırma işlevi belirtir. Geri çağırma işleyicisi, WinHttpAddRequestHeadersçağrılarak istekte daha önce gönderilen tanımlama bilgisini temizlemelidir. Geri arama işlevi, yeniden yönlendirme geri çağırması sırasında yeni özel tanımlama bilgileri ayarlamayabilir. İstemci, sonraki WinHttpSendRequest çağrısı için yeni çerezler eklemeden önce WinHttpReceiveResponse işleminin tamamlanmasını beklemelidir.
Tanımlama bilgisi üst bilgilerini kaldırma
WinHTTP istemci uygulamasının, önceki isteklerde gönderilen tanımlama bilgilerinin geçerli istekte yeniden gönderilmesini önlemek için bir isteği yeniden göndermeden önce mevcut istek tanımlama bilgisini temizlemesi gerekebilir; daha fazla bilgi için aşağıdaki Nota bakın. Ayrıca, istek işleyicisinde ilk istek gönderilmeden önce Tanımlama Bilgilerinin temizlenmesi gerekmediğini unutmayın. İstemci, mevcut tanımlama bilgilerini temizlemek için pwszHeaders parametresinde boş bir tanımlama bilgisi üst bilgisi bulundurarak ve dwModifier parametresinde WINHTTP_ADDREQ_FLAG_REPLACE bayrağını ayarlayarak WinHttpAddRequestHeaders çağrısı yapabilir. Aşağıdaki kod örneği, istekte çerez üst bilgisinin nasıl temizleneceğini gösterir.
WinHttpAddRequestHeaders(hRequest,
L"Cookie:",
-1,
WINHTTP_ADDREQ_FLAG_REPLACE);
WinHTTP API'sinin, işletim sisteminin Windows XP Service Pack 2 (SP2) ve Windows Server 2003 Service Pack 1 (SP1) öncesi sürümleri için farklı tanımlama bilgisi işleme davranışları vardır.
**WINDOWS XP SP2 ve üzeri ile Windows Server 2003 SP1 ve üzeri: **
WinHTTP API'si, istek işleyicisi için önceki isteklerde gönderilen tüm tanımlama bilgilerini temizler. İstemci, WinHttpSendRequest çağrısından önce el ile yeni çerez üstbilgileri ekleyebilir. WinHTTP API'nin otomatik tanımlama bilgisi işleme işlevi devre dışı bırakılmadıysa, WinHTTP API, sunucudan gelen tanımlama bilgisiyle birlikte yeni tanımlama bilgisi üst bilgisini ekler (veya istemci uygulaması el ile bir tanımlama bilgisi üst bilgisi eklemediyse yeni bir tanımlama bilgisi üst bilgisi ekler).
**WINDOWS XP SP2 ve Windows Server 2003 SP1: **
WinHTTP API, WinHttpReceiveResponsetamamlandıktan sonraistek çerez üst bilgisini temizlemez. Önceki isteklerde gönderilen tanımlama bilgileri, WinHttpSendRequestsonraki çağrılara yeniden gönderilecektir. WinHTTP istemci uygulaması, istek tutamacında bir isteği yeniden göndermeden önce mevcut tanımlama bilgisi üst bilgilerini temizlemelidir.