Path: csiph.com!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!de-l.enfer-du-nord.net!feeder2.enfer-du-nord.net!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: "J.O. Aho" Newsgroups: comp.lang.php Subject: Re: Changing session variables gives warning Date: Tue, 28 Aug 2012 17:42:18 +0200 Lines: 44 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net +ItTmKyks1zCQ9Ph5FSQwQ0B+6L6dab7BiBcLjzgBqAsrytrrdSkdNJAo+c1kNlaDR Cancel-Lock: sha1:cT2sUC5LogE7rjir0e0SVm/fRVQ= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120807 Thunderbird/14.0 In-Reply-To: Xref: csiph.com comp.lang.php:6899 On 28/08/12 08:37, Jason C wrote: > I'm setting a series of SESSION variables, then on each page check to make sure one of those variables hasn't changed; if so, the script reloads them. The purpose is to limit the number of MySQL queries on an already taxed server. > > I'm using a script like this: > > if ($default != $_SESSION['default']) { > $var_query = sprintf("SELECT * FROM vars WHERE var='%s' LIMIT 1", > mysql_real_escape_string($default)); > > list($_SESSION['default'], ...) = mysql_fetch_row(mysql_query($var_query)); why not just select the column you want instead of the whole row? > session_commit(); drop this line > } > > But now I get this warning in the log: > > PHP Warning: session_commit() [function.session-commit]: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively in whatever.php on line 165 > > I'm using PHP 5.2.17. > > Should I be changing these variables in a different way? Or is it perfectly safe to change the script to: I would suggest you skip using the session_write_close() (for which session_commit is an alias for), as it won't do much at all for PHP5. > session_commit(); > ini_set('session.bug_compat_warn', 0); > ini_set('session.bug_compat_42', 0); To make this to suppress the message in the error log, you need to run the ini_set before the session_write_close(), but then it's simpler just to drop it. -- //Aho