MySQL kullanan Session Sınıfı

Unutmadan yazmak istediğim bir kaç husus var. O yüzden de yarım birşey bırakmayım diye, tez çalışmamın içinden oturum sınıfımı çıkarıp, kullanılabilir hale getirdim. Bundan önceki yazımda mysql'in nasıl session için araç olacağını anlatmıştım. Şimdi ise bunu nasıl sınıf aracılığı ile yapacağımızı anlatalım.


PHP kodu
  1. <?php
  2.  
  3. /**
  4. Class oturum
  5. Copyright (C) 2009 Gündüz Can YILMAZ
  6. This program is free software: you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation, either version 3 of the License, or
  9. (at your option) any later version.
  10. This program is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. GNU General Public License for more details.
  14. You should have received a copy of the GNU General Public License
  15. along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. * @author Gündüz Can YILMAZ
  17. * @copyright 2010
  18. * @version 1.0.0
  19. * @access public
  20. * @site http://www.baglanti.net
  21. */
  22.  
  23. class oturum {
  24. function __construct(){
  25. ini_set('session.save_handler', 'user');
  26. /* Session yöntemini değiştirmemize izin verdiriyoruz. İzinliyse kaldırabilirsiniz */
  27. array('oturum', 'kapat'),
  28. array('oturum', 'oku'),
  29. array('oturum', 'yaz'),
  30. array('oturum', 'yoket'),
  31. array('oturum', 'temizlik')
  32. );
  33. /* Oturum dizinin ilk parametresi sınıfı, ikincisi ise fonksiyonu belirtiyor */
  34. register_shutdown_function('session_write_close');
  35. /* PHP 5.0.5 ten bu yana, oturum bilgisi sınıflar yok edildikten sonra kaydediliyor.
  36. O yüzden eğer bu fonksiyonu kullanıp da sonlanmadan önce yapılacak şiler arasına oturumun kaydedilmesini eklemezsek
  37. sınıfımızı kullanamıyoruz */
  38. }
  39.  
  40. function oturum_ac($depo,$oturum_ismi){
  41. /* depo dosyaların tutulduğu klasör
  42. oturum ismi de PHPSESSID ama biz bunları kullanmayacaz */
  43. global $baglanti;
  44. if(!is_resource($baglanti)){
  45. include('db_ayarlari.php.inc');
  46. $baglanti = @mysql_connect($adres, $kullanici, $sifre);
  47. if($baglanti)
  48. {
  49. $dbselect = @mysql_select_db($veritabani);
  50. if(!$dbselect)
  51. {
  52. @mysql_close($baglanti);
  53. $baglanti = $dbselect;
  54. }
  55. return $baglanti;
  56. }
  57. return false;
  58. }
  59. return $baglanti;
  60. }
  61.  
  62. function kapat() {
  63. return true;
  64. }
  65. function oku($sessid) {
  66. global $baglanti;
  67. $sorgu = mysql_query("SELECT veri FROM oturum WHERE sessid = '".mysql_real_escape_string($sessid)."' LIMIT 1",$baglanti);
  68. if($sorgu!==false) {
  69. $veridb=mysql_fetch_assoc($sorgu);
  70.  
  71. // veri okunduğunda da oturum süresi uzatılması istenirse
  72. mysql_query("UPDATE oturum SET sonerisim=".time()." WHERE sessid = '".mysql_real_escape_string($sessid)."' LIMIT 1",$baglanti);
  73. return $veridb['veri'];
  74. }
  75. return false;
  76. }
  77. function yaz($sessid,$veri){
  78. global $baglanti;
  79. mysql_query("REPLACE INTO oturum SET sessid = '".mysql_real_escape_string($sessid)."', sonerisim = ".time().", veri = '".mysql_real_escape_string($veri)."'",$baglanti);
  80. return (mysql_effected_rows()) ? true : false;
  81. }
  82. function yoket($sessid) {
  83. global $baglanti;
  84. mysql_query("DELETE FROM oturum WHERE sessid='".mysql_real_escape_string($sessid)."'");
  85. return (mysql_effected_rows()) ? true : false;
  86. }
  87. function temizlik($gecerlilik_suresi){
  88. global $baglanti;
  89. mysql_query("DELETE FROM oturum WHERE sonerisim < '".(time()-$gecerlilik_suresi)."'",$baglanti);
  90. return (mysql_effected_rows()) ? true : false;
  91. }
  92. }
  93. ?>

1 2


Okunma: 516 , Oy Sayısı: 14 , Puan: 7.21

Etiketler

mysql session , php sinif deposu , session sinifi , replace into , php session sonlandirma ,

0xyGen04 Şubat 2010 Perşembe 16:42:46


Can abi,
REPLACE INTO ve UPDATE table SET arasındaki fark nedir acaba ?
||


Gündüz Can YILMAZ05 Şubat 2010 Cuma 18:27:54


replace into kullandığımızda eğer aradığımız kayıt varsa onu siler ve yeni verileri ekler, zaten veri yoksa insert işlemi yapar. Bunu update ile yapmamız için ya önce var mı diye kontrol sorgusu yazıp varsa update yoksa insert yapmalıyız. Ha tabi INSERT INTO .... ON DUPLICATE KEY şeklinde kullanırsak daha şık olur. Silmek yerine direk update kullanmış oluruz. O an neden replace yazdığımı hatırlamıyorum ama şu an olsa o satırı on duplicate key kullanarak yazardım
||




Yorumunuz