PHP’de Oturum Nasıl Çalışır?
PHP’de oturum verileri $_SESSION süper global değişkeni içinde dizi olarak kaydedilir.Bir oturum
session_start() fonksiyonu ile başlatılır. Oturum açıldığında PHP
temporary klasörüne her kullanıcı için
PHPSESSID ile eşsiz bir dosya açar ve oturumu başlatır. Böylelikle kullanıcı sayfalar arasında gezinti sağlarken
temporary klasöründeki kullanıcıya ait olan dosyaya ulaşabilir.
Aynı şekilde oluşturulan
PHPSESSID ile sunucu kullanıcının tarayıcısına kaydedilmesi için bu değeri cokie olarak gönderir. Bu şekilde oturum döngüsü sağlanmış olur.
PHP Oturum Fonsiyonları
- session_start :Oturum başlatır
- session_register : Süper global değişkene değer kaydeder. $_SESSION da kullanılabilir.
- session_destroy : Oturum verilerini yok eder.
En temel seviyede bir oturum kontrolü için yukarıdaki fonksiyonlar kullanılarak bir oturum yönetimi sağlanır.
Oturum Sınıfını Oluşturma
Yukarıdaki fonksiyonları kullanarak oturum başlatmak, yönetmek ve sonlandırmak mümkün fakat daha esnek kullanımlar ve farklı projeler içinde kullanmak için oturum yönetim sınıfı oluşturmak bir zorunluluktur. Bu şekilde yaparak oturum yönetimini her sayfada esnek bir şekilde kullanılabilir hale getirmiş oluruz.
1.Adım: Oturum sınıfı oluşturuyoruz.
1
2
3
4
5
6
7 |
<?php
class Oturum
{
}
|
2.Adım: Singleton tasarımı ile oturum açılışı için gerekli başlatma metodunu yazıyoruz. Oturum başlatıldıysa yeninden başlatmak yerine mevcut oturum üzerinden kullanıcı işlemleri devam eder.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 |
......
private static $oturum;
/**
* Oturumu başlatır.
*
*@return Object Oturum nesnesi
*/
public static function baslat()
{
if (self::$oturum==null)
{
self::$oturum = new Oturum();
}
return self::$oturum;
}
/**
* Oturum singleton pattern.
*
*/
private function __construct()
{
session_start();
}
|
3.Adım: Oturumun başlatılıp başlatılmadığı kontrolünü yapmak için kullanılabilecek bir metot yazdım.(fakat çok kullanılacak bir metot değil.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
............
/**
* Oturum var mı kontrolü yapar.
*
*@return bool
*/
public function durum()
{
if(!session_id())
{
return false;
}
return true;
}
|
4.Adım: Oturum başlatıldıktan sonra
$_SESSION değişkenine veri ekleyerek sayfalar arasında taşıma işlemini gerçekleştiririz. Bunun için sınıfta
ekle metodu oluşturduk. $kimlik ile değişken adı, $deger ile değişkene kaydedilecek veriyi belirtiyoruz.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 |
..............
/**
* Oturuma yeni kimlik ekler
*
*@var string $kimlik
*@var mix $deger
*/
public function ekle($kimlik,$deger)
{
if(!session_id())
{
$hata='Oturum yok Oturum::baslat() yapınız.';
throw new Exception($hata);
}
$_SESSION[(string) $kimlik] = $deger;
}
|
5.Adım: $_SESSOIN içindeki verileri okumak için
getir ismindeki metot’a $kimlik bilgisini paraketre olarak gönderip içindeki veriyi okuma işlemini gerçekleştiriyoruz.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 |
..........
/**
* Oturumda kayıtlı kimliği getir
*
*@var string kimlik
*
*@return mixed $kimlik ile eşleşen kayıtlar
*/
public function getir($kimlik)
{
if(!session_id())
{
$hata="Oturum yok Oturum::baslat() yapınız.";
throw new Exception($hata);
}
if(isset($_SESSION[$kimlik]))
{
return $_SESSION[$kimlik];
}
return null;
}
|
6.Adım: Mevcut oturumdaki tüm kayıtlı verileri dizi olarak okumak için tumu metodunu oluşturuldu.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 |
...........
/**
* Oturumdaki tüm listeyi getir
*
*@return array()
*
*/
public function tumu()
{
if(!session_id())
{
$hata="Oturum yok Oturum::baslat() yapınız.";
throw new Exception($hata);
}
return $_SESSION;
}
|
7.Adım: Mevcut oturumu sonlandırmak için bosalt metodu oluşturuldu. Oturum verileri boşaltılıp, oturum sonlandırılıyor.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 |
/**
* Oturumu boşaltır
*
*@retrun bool
*
*/
public function bosalt()
{
if (session_id()) {
session_unset();
session_destroy();
$_SESSION = array();
self::$oturum=null;
return true;
}
return false;
}
|
8.Adım: Kayıtlı olan oturuma ait eşsiz kayıt numarasını okumak için oluşturuluş metot.
1
2
3
4
5
6
7
8
9
10
11
12 |
/**
* Oturumun eşsiz kaydını getir.
*
*@return string
*
*/
public function id()
{
return session_id();
}
|
9.Adım (Test): Oturum sınıfı oluşturuldu. Test etmek için aşağıdaki gibi test kodları yazılabilir. Unutmadan belirteyim. Genel bir kullanımdır. Sayfada çıktı işlemi yapmadan önce yazılacak ilk kod oturum başlatma kodudur. Her sayfada oturumu kullanabilmek için
Oturum::baslat() metodu çalıştırılması zorunludur.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 |
include 'oturum.php';
Oturum::baslat();
Oturum::ekle('isim','hayri');
Oturum::ekle('sifre','123456');
echo Oturum::getir('isim');
//hayri
var_dump(Oturum::tumu());
/*
hayriarray(2) {
["isim"]=>
string(5) "hayri"
["sifre"]=>
string(6) "123456"
}
*/
Oturum::bosalt();
|
Oturum.php (Oturum Sınıfı)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131 |
<?php
final class Oturum
{
/**
*
* Oturum sınıfı
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
* tarafından oluşturulmuştur. Özgürce kullanabilirsiniz.
*/
private static $oturum;
/**
* Oturumu başlatır.
*
*@return Object Oturum nesnesi
*/
public static function baslat()
{
if (self::$oturum==null)
{
self::$oturum = new Oturum();
}
return self::$oturum;
}
/**
* Oturum singleton pattern.
*
*/
private function __construct()
{
session_start();
}
/**
* Oturum var mı kontrolü yapar.
*
*@return bool
*/
public function durum()
{
if(!session_id())
{
return false;
}
return true;
}
/**
* Oturuma yeni kimlik ekler
*
*@var string $kimlik
*@var mix $deger
*/
public function ekle($kimlik,$deger)
{
if(!session_id())
{
$hata='Oturum yok Oturum::baslat() yapınız.';
throw new Exception($hata);
}
$_SESSION[(string) $kimlik] = $deger;
}
/**
* Oturumda kayıtlı kimliği getir
*
*@var string kimlik
*
*@return mixed $kimlik ile eşleşen kayıtlar
*/
public function getir($kimlik)
{
if(!session_id())
{
$hata="Oturum yok Oturum::baslat() yapınız.";
throw new Exception($hata);
}
if(isset($_SESSION[$kimlik]))
{
return $_SESSION[$kimlik];
}
return null;
}
/**
* Oturumdaki tüm listeyi getir
*
*@return array()
*
*/
public function tumu()
{
if(!session_id())
{
$hata="Oturum yok Oturum::baslat() yapınız.";
throw new Exception($hata);
}
return $_SESSION;
}
/**
* Oturumu boşaltır
*
*@retrun bool
*
*/
public function bosalt()
{
if (session_id()) {
session_unset();
session_destroy();
$_SESSION = array();
self::$oturum=null;
return true;
}
return false;
}
/**
* Oturumun eşsiz kaydını getir.
*
*@return string
*
*/
public function id()
{
return session_id();
}
}
|