Pengendali Session \(^o^)/ PHP


kepikiran buat judul diatas ni karna kemarin habis nonton onepiece 😀 *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

 

Advertisements

2 thoughts on “Pengendali Session \(^o^)/ PHP

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s