Sunucuda Session Dosyalarının Tutulduğu Dizinde İzin Problemi

Merhaba. Aslında Codeigniter Kullanım Kılavuzunda da bulabileceğiniz bir yöntemi hikaye gibi anlatıyorum ki okurken sıkılmayın...

Kendi localhost'umda güzel güzel çalışan web sitem, sunucuya attığımda da düzgün çalışıyor gibiydi. Ta ki oturum açmaya çalışana kadar. Yazdığım login sayfama girmeye çalıştığımda bir hatayla karşılaştım:

Message: Session: Configured save path 'C:\Windows\Temp' is not writable by the PHP process.

Yani, sunucuda session işlemlerimi tutan klasöre yazma yetkim olmadığından bahsediyor. Sunucuya doğrudan erişimim de yok. Sadece Plesk Panel üzerinden kontrol edebiliyorum.

Önce Plesk Panel üzerinden session dosyalarımın kaydedileceği klasörü değiştirmeyi düşündüm. Web sitemin kök dizini içine temp diye bir klasör oluşturup Plesk Panel üzerinden de session save path olarak bu klasörü gösterecektim. Ama bu da başka güvenlik sorunlarına yol açabilirdi.

Neyse ki session'ları tutmanın tek yolu bu dosyalama sistemi değil. Session'lar veritabanı üzerinde de tutulabilir. Sunucudaki (ve localhost'umdaki) veritabanında şu sorguyu çalıştırarak session verilerinin tutulabileği bir tablo oluşturdum:

MySQL kullananlar için:
CREATE TABLE IF NOT EXISTS `ci_session` (
    `id` varchar(128) NOT NULL,
    `ip_address` varchar(45) NOT NULL,
    `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
    `data` blob NOT NULL,
    KEY `ci_sessions_timestamp` (`timestamp`)
);
PostgreSQL kullananlar için:
CREATE TABLE "ci_session" (
        "id" varchar(128) NOT NULL,
        "ip_address" varchar(45) NOT NULL,
        "timestamp" bigint DEFAULT 0 NOT NULL,
        "data" text DEFAULT '' NOT NULL
);
CREATE INDEX "ci_sessions_timestamp" ON "ci_session" ("timestamp");

Sonrasında application/config/config.php dosyamda şu satırları buldum:
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
ve bu satırlar şeklinde değiştirdim:
$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_session';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
(Kaynak: codeigniter.com/user_guide/libraries/sessions.html#database-driver)

Artık session'larım PHP ile yazmama izin vermeyen o klasörde değil, veritabanımda tutulmaya başladı.


Yorumlar

  1. merhaba plesk panelde çalıştırırken .htcacces dosyası problemini web config dosyası ile aştım ancak panel bölümüne girmeye çalışırken ne yaptıysam gerekli rul oluşturamadım o konuda geçmiş bir tecrübeniz varmı teşekkürler

    YanıtlaSil

Yorum Gönder