Pengendali Session \(^o^)/ PHP

kepikiran buat judul diatas ni karna kemarin habis nonton onepiece :D *opo hubungane*
oke singkat serita saya nemu error yang menjengkelkan yaitu:

session_start() : Failed to initialize storage module: user

lha di local lancar kok setelah diupload error @_@
dan kemudian saya bengong gak tau musti gimana, maklum saya cuman programer yang belum cukup ilmu -__-‘
lalu mulailah tanya sama gogel dengan kata kunci error itu tadi

pertama dapet solusi untuk ngubah setingan server. tapi setelah dicoba ternyata malah timbul masalah yang lain yaitu aplikasi lain gak bisa login. hadeh.. balikin lagi deh setingan servernya. 

kedua dapet solusi ngubah setingan server lewat aplikasi yang bersangkutan biar gak ganggu aplikasi lain. dan hasilnya adalah tetep gak bisa. *dyeem*

ketiga solusinya adalah dengan ngopi+udud. alias cuman ditrawang aja xD

keempat setelah ditanyain lagi (buronan pak bos) dan kemudian ngeserach lagi gak ketemu, akhirnya dapet ide buat bikin penyimpanan session sendiri. kemudian ngesearch tentang penyimpanan session, dan baca-baca tentang fungsi-fungsi session di php.net akhirnya nemu fungsi buat custom session storage:

session_set_save_handler()

kemudian saya bikin file session.php seperti berikut:

<?php

/*folder lokasi session akan disimpan*/
function sess_folder(){
return dirname(__FILE__).'/data/';
}

/*mengecek session folder dan membuat folder bila diperlukan*/
function sess_open($save_path, $session_name) {
$path=sess_folder();
if(!is_dir($path)){
return mkdir($path,0775,true);
}
return TRUE;
}

/*menutup session*/
function sess_close() {
return TRUE;
}

/*mengambil data session*/
function sess_read($key) {
$value='';
$file=sess_folder().$key;
if(is_file($file)){
$value=file_get_contents($file);
$value=base64_decode($value);
}
return $value;
}

/*menyimpan data session*/
function sess_write($key, $value) {
$value=base64_encode($value);
return file_put_contents(sess_folder().$key,$value);
}

/*menghapus data session*/
function sess_destroy($sid) {
return unlink(sess_folder().$sid);
}

/*menghapus data session yang sudah expired*/
//referensi http://id1.php.net/manual/en/session.configuration.php#ini.session.gc-probability
function sess_gc($lifetime) {
$path=sess_folder();
$files=scandir($path);
$maxtime=time()-$lifetime;
foreach ($files as $file){
if($file=='.' || $file=='..' || is_dir($path.$file)) continue;
$modiftime=filemtime($path.$file);
if($maxtime>$modiftime){
unlink($path.$file);
}
}
return TRUE;
}

/*mengaktifkan fungsi-fungsi custom*/
//referensi http://id1.php.net/manual/en/function.session-set-save-handler.php
session_set_save_handler('sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy', 'sess_gc');

session_start();

kemudian bisa di test menggunakan script ini:

<?php
include dirname(__FILE__).'/session.php';

if(isset($_GET['login']) && !empty($_POST)){
$_SESSION=$_POST;
header('location:'.$_SERVER['PHP_SELF']);
}
elseif(isset($_GET['logout'])){
session_destroy();
header('location:'.$_SERVER['PHP_SELF']);
}

echo 'file tes1<hr>';

if(empty($_SESSION['user'])){
?>
<form method="post" action="?login">
Username <input type="text" name="user"/><br/>
Password <input type="password" name="pass"/><br/>
<button type="submit">Login</button>
</form>
<?php
}
else{
echo 'Hi '.$_SESSION['user'];
echo '<br><a href="'.$_SERVER['PHP_SELF'].'?logout">Logout</a>';
}
echo '<hr><pre>';
print_r($_SESSION);

dan bisa dilihat file dimana session tersebut disimpan:

sessiondata

silakan dilihat isinya kalo penasaran :p

 

sekian sedikit ilmu dari pengalaman penuh asap.

semoga bermanfaat