Jump to content


Photo

Why is script executing twice


  • Please log in to reply
No replies to this topic

#1 spiderdevil

spiderdevil
  • New Members
  • Pip
  • Newbie
  • 1 posts

Posted 24 July 2006 - 06:14 PM

Hi,
I am an average programmer, i am having problems with a script which i took from Custom Session Handling I made some modification for my needs, but i am facing some problems, The script is executing twice and after 6 seconds its not removing the old sessions (which it should).
What is wrong ? i am not getting, I am stuck and frustrated. any help would be greatly appreciated.Thanks in advance.

DS

filname=testsession.php
<?php

/* Create new object of class */
ini_set("session.use_only_cookies",false);
require_once("session_api.php");
$ses_class = new session(0.1);

if (!isset ($_SESSION['counter'])) {
    $_SESSION['counter'] = 0;
}

$_SESSION['counter'] = $_SESSION['counter']+1;

echo $_SESSION['counter'];
echo "<br>";
echo $ses_class->ses_maxTime;
echo "<br>";
echo ini_get ("session.gc_maxlifetime");
echo "<br>";
echo ini_get("session.use_only_cookies");

//*********TESTING********
    	$fwhandle = @fopen("test.txt","a");
		if($fwhandle)
		{
			if (fwrite($fwhandle, "script called\n") === FALSE)
				echo "Cannot write to file";

			fclose($fwhandle);
		}
		else
			echo "Cannot open to write file";
    	//*********CLOSE TESTING********
?>

filename=session_api.php
<?php

//http://www.zend.com/zend/spotlight/code-gallery-wade8.php?article=code-gallery-wade8&kind=sl&id=2787&open=1&anc=0&view=1
//http://us2.php.net/manual/en/function.session-set-save-handler.php#60316

//session_set_save_handler(
// array("Session", "_open"),
// array("Session", "_close"),
// array("Session", "_read"),
// array("Session", "_write"),
// array("Session", "_destroy"),
// array("Session", "_gc")
// ) or die("Failed to register session handler");
//
//session_start();

class Session
{
    var $db_host = "www.somehost.com";
    var $db_user = "username";
    var $db_pass = "password";
    var $db_dbase = "mysessions";
    /* MySQL Table name for session */
    var $ses_table = "sessions";

	var $isdb_con = true;
    var $app_name = "dummy_name";

    var $ses_maxTime=6;
    var $ses_onlyCookie;

	/* 	Class Constructor with max Time out of session in minutes */
	function Session($minutes=0)
	{
		$in_secs = $minutes * 60;
		if($in_secs<=0)
			$this->ses_maxTime = ini_get("session.gc_maxlifetime");
		else
		{
			ini_set("session.gc_maxlifetime",$in_secs);
			$this->ses_maxTime = $minutes * 60;
		}

		$this->ses_onlyCookie = ini_get("session.use_only_cookies");

		//register_shutdown_function('session_write_close');
		ini_set("session.gc_probability", 100);
		session_set_save_handler(array(&$this, '_open'),
		                             array(&$this, '_close'),
		                             array(&$this, '_read'),
		                             array(&$this, '_write'),
		                             array(&$this, '_destroy'),
		                             array(&$this, '_gc'));

		//Start the session
   		session_start();

	}

    /* Create a connection to a database */
    function db_connect()
    {
        $mysql_connect = @mysql_pconnect ($this->db_host, $this->db_user, $this->db_pass);
        $mysql_db = @mysql_select_db ($this->db_dbase);

        if (!$mysql_connect || !$mysql_db)
        {
            return FALSE;
        }
        else
        {
            return TRUE;
        }
    }

    /* Open session, if you have your own db connection
       code, put it in here! */
    function _open($path, $name)
    {
    	//*********TESTING********
    	$fwhandle = @fopen("test.txt","a");
		if($fwhandle)
		{
			if (fwrite($fwhandle, "_open method called\n") === FALSE)
				echo "Cannot write to file";

			fclose($fwhandle);
		}
		else
			echo "Cannot open to write file";
    	//*********CLOSE TESTING********

        if ($this->isdb_con == "Y")
        {
            $this->db_connect();
        }

        return TRUE;
    }

    /* Close session */
    function _close()
    {
    	//*********TESTING********
    	$fwhandle1 = @fopen("test.txt","a");
		if($fwhandle1)
		{
			if (fwrite($fwhandle1, "_close method called\n") === FALSE)
				echo "Cannot write to file";

			fclose($fwhandle1);
		}
		else
			echo "Cannot open to write file";
    	//*********CLOSE TESTING********

        /* This is used for a manual call of the
           session gc function */
        $this->_gc(0);

        return TRUE;
    }

    /* Read session data from database */
    function _read($ses_id)
    {
    	//*********TESTING********
    	$fwhandle2 = @fopen("test.txt","a");
		if($fwhandle2)
		{
			if (fwrite($fwhandle2, "_read method called\n") === FALSE)
				echo "Cannot write to file";

			fclose($fwhandle2);
		}
		else
			echo "Cannot open to write file";
    	//*********CLOSE TESTING********

        $session_sql = "SELECT * FROM " . $this->ses_table
                     . " WHERE ses_id = '$ses_id'";

		// echo "<br/>$session_sql<br/>";

        $session_res = @mysql_query($session_sql);
        if (!$session_res)
        {
            return '';
        }

        $session_num = @mysql_num_rows ($session_res);
        if ($session_num > 0)
        {
            $session_row = mysql_fetch_assoc ($session_res);

            if(isset($_SERVER['REMOTE_ADDR']))
				$ipnum = "$_SERVER[REMOTE_ADDR]";
			else
				$ipnum = "";

			if($session_row["ip_number"] !=$ipnum)
			{
				//don't show anything
				return '';
			}

            $ses_data = $session_row["ses_value"];

            return $ses_data;
        }
        else
        {
            return '';
        }
    }

    /* Write new data to database */
    function _write($ses_id, $data)
    {
    	//*********TESTING********
    	$fwhandle3 = @fopen("test.txt","a");
		if($fwhandle3)
		{
			if (fwrite($fwhandle3, "_write method called\n") === FALSE)
				echo "Cannot write to file";

			fclose($fwhandle3);
		}
		else
			echo "Cannot open to write file";
    	//*********CLOSE TESTING********

        $session_sql = "UPDATE " . $this->ses_table
                     . " SET ses_time=" . time()
                     . ", ses_value='$data' WHERE ses_id='$ses_id'";
		echo "<br/>$session_sql<br/>";
        $session_res = @mysql_query ($session_sql);

        if (!$session_res)
        {
            return FALSE;
        }
        if (mysql_affected_rows ())
        {
            return TRUE;
        }

		if(isset($_SERVER['REMOTE_ADDR']))
			$ipnum = "'$_SERVER[REMOTE_ADDR]'";
		else
			$ipnum = Null;

        $session_sql = "INSERT INTO " . $this->ses_table
                     . " (ses_id, ses_time, ses_start, ses_value,app_name,ip_number)"
                     . " VALUES ('$ses_id', " . time()
                     . ", " . time() . ", '$data','$this->app_name',$ipnum)";

		// echo "<br/>$session_sql<br/>";

        $session_res = @mysql_query ($session_sql);
        if (!$session_res)
        {
            return FALSE;
        }
        else
        {
            return TRUE;
        }
    }

    /* Destroy session record in database */
    function _destroy($ses_id)
    {
    	//*********TESTING********
    	$fwhandle4 = @fopen("test.txt","a");
		if($fwhandle4)
		{
			if (fwrite($fwhandle4, "‘_destroy’ method called\n") === FALSE)
				echo "Cannot write to file";

			fclose($fwhandle4);
		}
		else
			echo "Cannot open to write file";
    	//*********CLOSE TESTING********

        $session_sql = "DELETE FROM " . $this->ses_table
                     . " WHERE ses_id = '$ses_id'";
        $session_res = @mysql_query ($session_sql);

        if (!$session_res)
        {
            return FALSE;
        }
        else
        {
            return TRUE;
        }
    }

    /* Garbage collection, deletes old sessions */
    function _gc($life) //ignore $life
    {
    	//*********TESTING********
    	$fwhandle5 = @fopen("test.txt","a");
		if($fwhandle5)
		{
			if (fwrite($fwhandle5, "‘_gc’ method called\n") === FALSE)
				echo "Cannot write to file";

			fclose($fwhandle5);
		}
		else
			echo "Cannot open to write file";
    	//*********CLOSE TESTING********

    	$strtim ="-". $this->ses_maxTime ." seconds";

        $ses_life = strtotime($strtim);
        $session_sql = "DELETE FROM " . $this->ses_table . " WHERE ses_time < $ses_life and app_name='$this->app_name'";
        echo "<br/>$session_sql<br/>";
        $session_res = @mysql_query ($session_sql);

        if (!$session_res)
            return FALSE;

		//also see all sessions for max of 24 hours (default)
		$strtim1 ="-". get_cfg_var("session.gc_maxlifetime") ." seconds";

		$ses_life1 = strtotime($strtim1);
		$session_sql1 = "DELETE FROM " . $this->ses_table . " WHERE ses_time < $ses_life1";
        $session_res1 = @mysql_query ($session_sql1);

        if (!$session_res1)
            return FALSE;
        else
            return TRUE;
    }
}
?>






0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users