Hi, Sunday, October 19, 2003, 7:35:23 AM, you wrote:
> That would be one solution, but I am on a shared hosting server. I cannot > change the folder permissions. > I've asked tech support to look into this. > Does anyone know where I can get a class that will save the session vars > to mysql? Here is a class I wrote a while back which will give you a good start. The only weird thing I did was start a new session if read failed rather than wait to check when writing the session data but it worked fine. <?php /* SQL for table creation in db called admin CREATE TABLE phpsessions ( sessionid varchar(64) NOT NULL default '', sessionsize int(10) default NULL, sessiondata mediumtext, sessionname varchar(255) default NULL, sesstime int(11) default NULL, username varchar(64) default NULL, sessend int(11) default NULL, authid varchar(100) NOT NULL default '0', PRIMARY KEY (sessionid) ) TYPE=MyISAM PACK_KEYS=1; */ class sessionClass{ var $ses; //session on flag var $sessionname; //current name of session var $message; //error message holder var $modulename; //type of module, should be user var $sessionid; // var $con; //datbase handle var $sessionlife; //how long inactive before the session should time out var $maxgclife; //absolute time for session data to survive var $host; //client host var $Username; //username var $authid; // a unique id for authClass created for a new session function sessionClass($sessionname="",$lifetime="",$maxgc=""){ global $session_ref; //a reference array for access by buried functions $session_ref[] =& $this; ini_set( "session.save_handler", "user" ); function open($save_path, $session_name) { global $session_ref; $con = @mysql_connect("localhost" , "username" , "password" ); if($con): @mysql_select_db("admin",$con); $session_ref[0]->con = $con; return true; else: return false; endif; } function close() { //global $session_ref; //$con = $session_ref[0]->getcon(); //@mysql_close($con); return true; } function read($key) { global $session_ref; $con = $session_ref[0]->con; $sessionname = $session_ref[0]->sessionname; $lifetime = $session_ref[0]->sessionlife; $host = ereg_replace("www.","",$_SERVER["HTTP_HOST"]); $Username = substr($host,0,strpos($host,".")); //format is username.domain.com $session_ref[0]->setuser($host,$Username); $val = ""; $sessiondata = ""; $now = time(); $insert = "Yes"; $result = @mysql_query("SELECT * FROM phpsessions WHERE sessionid = '$key'",$con); if($row = @mysql_fetch_array($result)): $sesstime = $row["sesstime"]; $user = $row["username"]; $diff = $now - $sesstime; if($Username != $user): $result = @mysql_query("DELETE FROM phpsessions WHERE sessionid = '$key'",$con); $session_ref[0]->message = "<font color=\"red\">Domain has changed, please login again.</font>"; else: if($diff < $lifetime): $sessiondata = $row["sessiondata"]; $result = @mysql_query("UPDATE phpsessions SET sesstime = '$now' WHERE sessionid = '$key'",$con); $insert = "No"; else: $result = @mysql_query("DELETE FROM phpsessions WHERE sessionid = '$key'",$con); $session_ref[0]->message .= "<font color=\"red\">Session has timed out, please login again.</font>"; endif; endif; endif; if($insert == "Yes"): $authid = md5(uniqid (rand())); $result = mysql_query("INSERT INTO phpsessions (sessionid,sessionsize,sessiondata,sessionname,sesstime,username,authid) VALUES ('$key',1,'$val','$sessionname','$now','$Username','$authid')",$con); endif; return $sessiondata; } function write($key, $val) { global $session_ref; $con = $session_ref[0]->con; $val = ereg_replace("'","''",$val); $result = @mysql_query("UPDATE phpsessions SET sessiondata = '$val' WHERE sessionid = '$key'",$con); return true; } function destroy($key) { global $session_ref; $con = $session_ref[0]->con; $result = @mysql_query("DELETE FROM phpsessions WHERE sessionid = '$key'",$con); $session_ref[0]->ses = 0; $session_ref[0]->sessionid = ""; $session_ref[0]->authid = ""; return true; } function gc($maxlifetime) { global $session_ref; $con = $session_ref[0]->con; $sessionname = $session_ref[0]->sessionname; // this sesions name $min = time() - $session_ref[0]->sessionlife; //this session name lifetime $amin = time() - $session_ref[0]->maxgclife; //all sessions max lifetime $result = mysql_query("DELETE FROM phpsessions WHERE (sessionname = '$sessionname' AND sesstime < $min) OR sesstime < $amin",$con); //$session_ref[0]->message .= "<font color=\"green\">Session gc called on $sessionname - min = $min .</font>"; return true; } session_set_save_handler("open", "close", "read", "write", "destroy", "gc"); //set up some defaults $this->sessionname = $sessionname; $this->sessionlife = $lifetime; if($this->sessionname == ""): $this->sessionname = "PHPSESSID"; endif; session_name($this->sessionname); if($lifetime == ""): $this->sessionlife = get_cfg_var("session.gc_maxlifetime"); endif; if($maxgc == ""): $this->maxgclife = 21600; //6hours else: $this->maxgclife = $maxgc; endif; //ok go for it session_start(); $this->modulename = session_module_name(); $this->sessionid = session_id(); $this->ses = 1; } //oddball functions function session_restart(){ session_destroy(); $url = "http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]; header("Location: $url"); exit; } function addmessage($mess){ $this->message .= $mess; } function getmessage(){ return $this->message; } function getmodulename(){ return $this->modulename; } function getid(){ return $this->sessionid; } function getlifetime(){ return $this->sessionlife; } function setuser($host,$user){ $this->host = $host; $this->Username = $user; } function getuser($type = ""){ if($type == "u"): return $this->Username; elseif($type == "h"): return $this->host; else: return $this->host." ".$this->Username; endif; } } ?> Usage: include('sessionClass.inc'); $s =& new sessionClass('LOGIN',3600,7200); //session named LOGIN 1 hour session lifetime and clear everything older than 2 hours Then use $_SESSION like normal -- regards, Tom -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php