note 43100 added to function.session-set-save-handler

From: Date: Wed, 09 Jun 2004 17:23:12 +0000
Subject: note 43100 added to function.session-set-save-handler
Groups: php.notes 
Request: Send a blank email to php-notes+get-70423@lists.php.net to get a copy of this message
This is an LDAP implementation that I wrote which works just fine for me. This assumes you've got some global variables with your host and other info. It also uses a custom error function which I have not defined here. Also, it assumes your LDAP server is set up with correct permissions, objectclass, and all that. I used an octet string in LDAP to hold the session data. I had to manually wrap some of this so be careful with cutting and pasting. $sessconn=null; //Custom session handling stored in local LDAP function ldap_sess_open($save_path,$session_name) { global $infohost,$infoport,$infodn,$infopw,$sessconn; $sessconn=@ldap_connect($infohost,$infoport); if(!@ldap_bind($sessconn,$infodn,$infopw)) { setError("Failed to open session."); return false; } return true; } function ldap_sess_close() { global $sessconn; @ldap_close($sessconn); return true; } function ldap_sess_read($id) { global $sessconn; $sr=@ldap_search($sessconn,'ou=sessions,o=Company', "(cn=$id)"); $info=@ldap_get_entries($sessconn,$sr); if($info['count']>0) return $info[0]['session'][0]; else return ""; } function ldap_sess_write($id,$sess_data) { global $sessconn; $update=array(); $update['objectClass']=array('phpsession','top'); $update['session']=$sess_data; $dn="cn=$id,ou=sessions,o=Company"; @ldap_delete($sessconn,$dn); @ldap_add($sessconn,$dn,$update); return true; } function ldap_sess_destroy($id) { global $sessconn; $dn="cn=$id,ou=sessions,o=Company"; @ldap_delete($sessconn,$dn); return true; } function ldap_sess_gc($maxlifetime) { global $sessconn; $sr=@ldap_search($sessconn,'ou=sessions,o=Company', '(objectClass=phpsession)',array('+','cn')); $info=@ldap_get_entries($sessconn,$sr); if($info['count']>0) { for($i=0;$i<$info['count'];$i++) { $id=$info[$i]['cn'][0]; $dn="cn=$id,ou=sessions,o=Company"; $modified=stamp2local($info[$i]['modifytimestamp'][0]); if((time()-$modified)>=$maxlifetime) @ldap_delete($sessconn,$dn); } } return true; } //converts my LDAP timestamps over to Unix timestamps function stamp2local($ldapstamp) { $year=substr($ldapstamp,0,4); $month=substr($ldapstamp,4,2); $day=substr($ldapstamp,6,2); $hour=substr($ldapstamp,8,2); $minute=substr($ldapstamp,10,2); $stamp=gmmktime($hour,$minute,0,$month,$day,$year); return $stamp; } //Use this so that if your LDAP server goes down people can still //retain sessions the normal way $checkds=@ldap_connect($infohost,$infoport); if(@ldap_bind($checkds,$infodn,$infopw)) { session_set_save_handler("ldap_sess_open","ldap_sess_close", "ldap_sess_read","ldap_sess_write","ldap_sess_destroy", "ldap_sess_gc"); } @ldap_close($checkds); ---- Manual Page -- http://www.php.net/manual/en/function.session-set-save-handler.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+43100 Delete -- http://master.php.net/manage/user-notes.php?action=delete+43100&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+43100&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#70423) next »