Thread: [Phplib-users] Strange session problem
Brought to you by:
nhruby,
richardarcher
|
From: Carl Y. <ca...@yo...> - 2002-03-17 06:57:07
|
I've been hosting a site with a hosting service that only let me use one
database. Now I'm trying to get this site running on my home windows
machine using FoxServ (a combination PHP/MySQL install package for Windows).
In anticipation of future database fragmentation, I've split my session
table into a separate database. When this site goes live commercially I
intend to have multiple database servers and probably one that is dedicated
to session data. So my session classes look like this:
class SessionDB extends DB_Sql
{
var $Host = 'localhost';
var $Database = 'session';
var $User = 'myusername';
var $Password = 'mypassword';
}
class Bank_CT_Sql extends CT_Sql
{
var $database_class = 'SessionDB'; ## Which database to
connect...
var $database_table = 'active_sessions'; ## and find our session
data in this table.
}
class Bank_Session extends Session
{
var $classname = 'Bank_Session';
var $cookiename = ''; ## defaults to
classname
var $magic = 'Umuarama'; ## ID seed
var $mode = 'get'; ## We propagate session
IDs with cookies
var $fallback_mode = 'get';
var $allowcache = 'no';
var $lifetime = 259200; ## 0 = do session
cookies, else minutes
var $that_class = 'Bank_CT_Sql'; ## name of data storage
container
var $gc_probability = 25;
var $gc_time = 720;
var $auto_init = '../include/setup.inc';
}
But when I try to log in I get an error message on the login form page that
displays after the login form itself. It says:
Database error: Invalid SQL: update active_sessions set
val='QmFua19TZXNzaW9uOiR0aGlzLT5pbiA9ICcnOyAkdGhpcy0+cHQgPSBhcnJheSgpOyAkdGh
pcy0+cHRbJ2F1dGgnXSA9ICcxJzsgJHRoaXMtPnB0WydjaGFsbGVuZ2UnXSA9ICcxJzsgJEdMT0J
BTFNbJ2F1dGgnXSA9IG5ldyBCYW5rX0NoYWxsZW5nZV9BdXRoOyAkR0xPQkFMU1snYXV0aCddLT5
hdXRoID0gYXJyYXkoKTsgJEdMT0JBTFNbJ2F1dGgnXS0+YXV0aFsndWlkJ10gPSAnZm9ybSc7ICR
HTE9CQUxTWydhdXRoJ10tPmF1dGhbJ3Blcm0nXSA9ICcnOyAkR0xPQkFMU1snYXV0aCddLT5hdXR
oWydleHAnXSA9ICcyMTQ3NDgzNjQ3JzsgJEdMT0JBTFNbJ2F1dGgnXS0+YXV0aFsncmVmcmVzaCd
dID0gJzIxNDc0ODM2NDcnOyAkR0xPQkFMU1snY2hhbGxlbmdlJ10gPSAnZDljNTg3YTQ4YzkwMjA
wMDU5M2Y1MGUxMTYyNTEwNzEnOyA=', changed='20020316202455' where
sid='7c2d54a5282d1bc17c8ec19d28b662a7' and name='Bank_Session'
MySQL Error: 1146 (Table 'bank_user.active_sessions' doesn't exist)
Session halted.
It looks like it is trying to save session info in the wrong database. But
I put some debugging code into ct_sql.inc at line 97 just before the query
tries to get executed to see what database name and host the class is
actually set to. It is set to "session" and not "bank_user" (which is
another database on the server). Is this a problem in phplib or in php
itself? It seems really strange that the DB_Sql class would try to connect
to the wrong database.
Any ideas or help would be greatly appreciated.
Thanks,
Carl Youngblood
|
|
From: <new...@dk...> - 2002-03-17 08:31:51
|
Cannot help, but:
Yes, I also have this problem! I've "fixed" it for myself in querying
the session table in the proper database before closing with page_close().
This is a bloody hack but works fine for me at the moment. ;-)
Marco
Carl Youngblood wrote:
>I've been hosting a site with a hosting service that only let me use one
>database. Now I'm trying to get this site running on my home windows
>machine using FoxServ (a combination PHP/MySQL install package for Windows).
>In anticipation of future database fragmentation, I've split my session
>table into a separate database. When this site goes live commercially I
>intend to have multiple database servers and probably one that is dedicated
>to session data. So my session classes look like this:
>
>class SessionDB extends DB_Sql
>{
> var $Host = 'localhost';
> var $Database = 'session';
> var $User = 'myusername';
> var $Password = 'mypassword';
>}
>
>class Bank_CT_Sql extends CT_Sql
>{
> var $database_class = 'SessionDB'; ## Which database to
>connect...
> var $database_table = 'active_sessions'; ## and find our session
>data in this table.
>}
>
>class Bank_Session extends Session
>{
> var $classname = 'Bank_Session';
>
> var $cookiename = ''; ## defaults to
>classname
> var $magic = 'Umuarama'; ## ID seed
> var $mode = 'get'; ## We propagate session
>IDs with cookies
> var $fallback_mode = 'get';
> var $allowcache = 'no';
> var $lifetime = 259200; ## 0 = do session
>cookies, else minutes
> var $that_class = 'Bank_CT_Sql'; ## name of data storage
>container
> var $gc_probability = 25;
> var $gc_time = 720;
> var $auto_init = '../include/setup.inc';
>}
>
>But when I try to log in I get an error message on the login form page that
>displays after the login form itself. It says:
>
>Database error: Invalid SQL: update active_sessions set
>val='QmFua19TZXNzaW9uOiR0aGlzLT5pbiA9ICcnOyAkdGhpcy0+cHQgPSBhcnJheSgpOyAkdGh
>pcy0+cHRbJ2F1dGgnXSA9ICcxJzsgJHRoaXMtPnB0WydjaGFsbGVuZ2UnXSA9ICcxJzsgJEdMT0J
>BTFNbJ2F1dGgnXSA9IG5ldyBCYW5rX0NoYWxsZW5nZV9BdXRoOyAkR0xPQkFMU1snYXV0aCddLT5
>hdXRoID0gYXJyYXkoKTsgJEdMT0JBTFNbJ2F1dGgnXS0+YXV0aFsndWlkJ10gPSAnZm9ybSc7ICR
>HTE9CQUxTWydhdXRoJ10tPmF1dGhbJ3Blcm0nXSA9ICcnOyAkR0xPQkFMU1snYXV0aCddLT5hdXR
>oWydleHAnXSA9ICcyMTQ3NDgzNjQ3JzsgJEdMT0JBTFNbJ2F1dGgnXS0+YXV0aFsncmVmcmVzaCd
>dID0gJzIxNDc0ODM2NDcnOyAkR0xPQkFMU1snY2hhbGxlbmdlJ10gPSAnZDljNTg3YTQ4YzkwMjA
>wMDU5M2Y1MGUxMTYyNTEwNzEnOyA=', changed='20020316202455' where
>sid='7c2d54a5282d1bc17c8ec19d28b662a7' and name='Bank_Session'
>MySQL Error: 1146 (Table 'bank_user.active_sessions' doesn't exist)
>Session halted.
>
>It looks like it is trying to save session info in the wrong database. But
>I put some debugging code into ct_sql.inc at line 97 just before the query
>tries to get executed to see what database name and host the class is
>actually set to. It is set to "session" and not "bank_user" (which is
>another database on the server). Is this a problem in phplib or in php
>itself? It seems really strange that the DB_Sql class would try to connect
>to the wrong database.
>
>Any ideas or help would be greatly appreciated.
>
>Thanks,
>Carl Youngblood
>
>
>_______________________________________________
>Phplib-users mailing list
>Php...@li...
>https://lists.sourceforge.net/lists/listinfo/phplib-users
>
|
|
From: nathan r. h. <na...@ds...> - 2002-03-18 17:25:19
|
I hope sthat's a really high traffic site to require spliting into
multiple physical servers. I think it might be overkill but.. what the
hey :) If you're looking for speed, use a shmem partition for session
data. Super fast and if done correctly, the removal of the session data
shouldn't be an issue becasue all your sessions would have closed with the
server shutdown :) (eg: use the user object instead of regurgitating old
sessions or setting a session life time for some unreasonable anout of
time)
Anyway, this is an age old problem that lives in php and conneciton
pooliing, the answer is to have different username / apssword paris for
each different database you wish to access.
You could also poll the correct db, before page_close() but that's (as
stated before) a hack.
-n
------
nathan hruby
na...@ds...
------
On Sat, 16 Mar 2002, Carl Youngblood wrote:
> I've been hosting a site with a hosting service that only let me use one
> database. Now I'm trying to get this site running on my home windows
> machine using FoxServ (a combination PHP/MySQL install package for Windows).
> In anticipation of future database fragmentation, I've split my session
> table into a separate database. When this site goes live commercially I
> intend to have multiple database servers and probably one that is dedicated
> to session data. So my session classes look like this:
>
> class SessionDB extends DB_Sql
> {
> var $Host = 'localhost';
> var $Database = 'session';
> var $User = 'myusername';
> var $Password = 'mypassword';
> }
>
> class Bank_CT_Sql extends CT_Sql
> {
> var $database_class = 'SessionDB'; ## Which database to
> connect...
> var $database_table = 'active_sessions'; ## and find our session
> data in this table.
> }
>
> class Bank_Session extends Session
> {
> var $classname = 'Bank_Session';
>
> var $cookiename = ''; ## defaults to
> classname
> var $magic = 'Umuarama'; ## ID seed
> var $mode = 'get'; ## We propagate session
> IDs with cookies
> var $fallback_mode = 'get';
> var $allowcache = 'no';
> var $lifetime = 259200; ## 0 = do session
> cookies, else minutes
> var $that_class = 'Bank_CT_Sql'; ## name of data storage
> container
> var $gc_probability = 25;
> var $gc_time = 720;
> var $auto_init = '../include/setup.inc';
> }
>
> But when I try to log in I get an error message on the login form page that
> displays after the login form itself. It says:
>
> Database error: Invalid SQL: update active_sessions set
> val='QmFua19TZXNzaW9uOiR0aGlzLT5pbiA9ICcnOyAkdGhpcy0+cHQgPSBhcnJheSgpOyAkdGh
> pcy0+cHRbJ2F1dGgnXSA9ICcxJzsgJHRoaXMtPnB0WydjaGFsbGVuZ2UnXSA9ICcxJzsgJEdMT0J
> BTFNbJ2F1dGgnXSA9IG5ldyBCYW5rX0NoYWxsZW5nZV9BdXRoOyAkR0xPQkFMU1snYXV0aCddLT5
> hdXRoID0gYXJyYXkoKTsgJEdMT0JBTFNbJ2F1dGgnXS0+YXV0aFsndWlkJ10gPSAnZm9ybSc7ICR
> HTE9CQUxTWydhdXRoJ10tPmF1dGhbJ3Blcm0nXSA9ICcnOyAkR0xPQkFMU1snYXV0aCddLT5hdXR
> oWydleHAnXSA9ICcyMTQ3NDgzNjQ3JzsgJEdMT0JBTFNbJ2F1dGgnXS0+YXV0aFsncmVmcmVzaCd
> dID0gJzIxNDc0ODM2NDcnOyAkR0xPQkFMU1snY2hhbGxlbmdlJ10gPSAnZDljNTg3YTQ4YzkwMjA
> wMDU5M2Y1MGUxMTYyNTEwNzEnOyA=', changed='20020316202455' where
> sid='7c2d54a5282d1bc17c8ec19d28b662a7' and name='Bank_Session'
> MySQL Error: 1146 (Table 'bank_user.active_sessions' doesn't exist)
> Session halted.
>
> It looks like it is trying to save session info in the wrong database. But
> I put some debugging code into ct_sql.inc at line 97 just before the query
> tries to get executed to see what database name and host the class is
> actually set to. It is set to "session" and not "bank_user" (which is
> another database on the server). Is this a problem in phplib or in php
> itself? It seems really strange that the DB_Sql class would try to connect
> to the wrong database.
>
> Any ideas or help would be greatly appreciated.
>
> Thanks,
> Carl Youngblood
>
>
> _______________________________________________
> Phplib-users mailing list
> Php...@li...
> https://lists.sourceforge.net/lists/listinfo/phplib-users
>
|