Kullanıcı web sunucusuna bağlandıktan sonra yapacağı her işlem için o an hangi aşamada olunduğu bilgisi bilinmelidir. Bunun için oturum bilgisinin bir şekilde tutulmalısı gerekir. Bu durum session management kapsamına girmektedir.
Cookiler session management sorununu client tarafında çözen bir yoldur. Cookie'ler isim, değer, zaman aşımı süresi gibi bilgiler içerebilirler.
İstemcilere cookie göndermek için 'setcookie' fonksiyonu kullanılir.
İstemcilerden gelen cookieler ise $HTTP_COOKIE_VARS global associative arrayından cookie adı index olarak verilerek okunabilir.
Cookieleri sisteminizde tanımlı kullanıcıları ayırdetmekte kullanabilirsiniz. LDAP sunucusu bağlantısı için kullanıcı adı ve şifresini tekrar tekrar girmemesini sağlamak için ilk olarak login ekranını gönderen script içinde komutları ile browserlerindeki user ve pwd cookieleri temizleniyor:
setcookie("user");
setcookie("pwd");
Sonra formdan girilen değerler ikinci bir scriptde browsere set edilir:
setcookie("user", $user);
setcookie("pwd" , $pwd);
Doğrulamanın yapılacağı scriptte bu değerler alınıyor:
$user = $HTTP_COOKIE_VARS["user"]; $pwd = $HTTP_COOKIE_VARS["pwd"];
Bu metod çalışmakla birlikte yalnızca güvenli olduğunu düşündüğünüz bir bölgede kullanılmalıdır. Aksi taktirde HTTP üzerinden açık bir şekilde giden kullanıcı adı ve şifresi rahatça alınabilir. Bu nedenle authentication gereken web bölgeleri ve uygulamaları için secure socket layer kullanılması (HTTPS protokolü üzerinden) önerilir.
Ayrıca setcookie fonksiyonuyla sadece HTTPS kullanılıyorsa cookie göndermesi sağlanabilir.
NSEnterprise Server'deki session objectlerini karşılayacak yapılar shared memory ve semafor kullanılarak kurulabilir. Hafızada script ömrüyle sınırlı olmayan alanlar ayırmak için shared memory fonksiyonları kullanılabilir. Aynı scriptin hafızadaki tüm kopyalarının okuyabileceği paylaşılabilir bir alan yaratılır:
define(_SHMKEY,1000); // Kendi atadığımız bir değer -- biricik olmalı define(_SHMSIZE,1000); // 1000 Bytelık bir alan define(_SHMPERM,"600"); // Yalnızca web sunucunun uid'sine sahip kullanıcı okuyup yazabilsin $shm_id = shm_attach(_SHMKEY,_SHMSIZE,_SHMPERM);
Artık shared memoy'mizden okumak için:
$value = shm_get_var($shm_id, $index);
Shared memory'e yazmak için:
shm_put_var($shm_id, $index, $value);
kullanılabilir. Burada '$index' tamsayı olmak zorudadır. Fakat shared memor'ye bu şekilde erişmek güvenli olamayacağı için semafor kullanımı şarttır:
define(_SEMKEY,1234); // Kendi atadığımız bir değer -- biricik olmalı define(_SEMPERM,"600"); // Yalnızca web sunucunun uid'sine sahip kullanıcı bu semaforu kullanabilsin $sem_id = sem_get(_SEMKEY, 1, _SEMPERM);
Şimdi shared memory işlemlerinin yapılacağı kritik kesim semafor işleçleri arasına alınarak sözkonusu hafıza bölgesi güvenli bir şekilde kullanılabilir:
sem_acquire($sem_id); //--- Semafor aynı scriptin başka bir kopyası tarafından alınmışsa burada bekler
{ Kritik kesim }
sem_release($sem_id);
Burada dikkat edilmesi gereken nokta web sunucunun uid'i ile çalışan herhangibir görevin shared memory alanına erişebileceği riskidir.