For Programmers: Free Programming Magazines  


Home > Archive > PHP Language > July 2004 > Problem with object in $_SESSION and include









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Problem with object in $_SESSION and include
Jean Vaillancourt

2004-07-30, 8:55 pm

Hi,

I have to put an object in $_SESSION and to use it later in the session.

My class is defined in a file which I include at the beginning of my program,
just after my session has been started:

session_start();
require_once "include/Produit.php";

When my program comes back, I try to get my stored object back:


line 3: $x = new Produit();
line 4: $x=&$_SESSION['produit'];
line 5: echo "*** produit:".$x -> nomFR;

and I get this error:

Fatal error: The script tried to execute a method or access a property of an
incomplete object. Please ensure that the class definition produit of the
object you are trying to operate on was loaded _before_ the session was
started in /[...]/maj.php on line 5

I then invert my session_start and the include:

line 10: require_once "include/Produit.php";
line 11: session_start();

and I get this warning:

Warning: Cannot send session cache limiter - headers already sent (output
started at [...]/Produit.php:160) in [...]/ctrlappl.php on line 11

where /Produit.php is the file containing my class and line 160 is the very
last line of the file.

Can someone help?

Jean Vaillancourt, Mascouche
Sebastian Lauwers

2004-07-31, 3:55 am

Jean Vaillancourt wrote:
> Hi,


Bonsoir, (:p)

[...]

> Warning: Cannot send session cache limiter - headers already sent (output
> started at [...]/Produit.php:160) in [...]/ctrlappl.php on line 11


This is just because you start the sessions after something has been
sent to the (client's) browser.

[...]

> Can someone help?


I wish i could do more.

> Jean Vaillancourt, Mascouche


HTH,
Sebastian
steve

2004-07-31, 3:55 am

"Jean Vaillancourt" wrote:
> Hi,
>
> I have to put an object in $_SESSION and to use it later in the
> session.
>
> My class is defined in a file which I include at the beginning of

my
> program,
> just after my session has been started:
>
> session_start();
> require_once "include/Produit.php";
>
> When my program comes back, I try to get my stored object back:
>
>
> line 3: $x = new Produit();
> line 4: $x=&$_SESSION[’produit’];
> line 5: echo "*** produit:".$x -> nomFR;
>
> and I get this error:
>
> Fatal error: The script tried to execute a method or access a

property
> of an
> incomplete object. Please ensure that the class definition produit

of
> the
> object you are trying to operate on was loaded _before_ the session
> was
> started in /[...]/maj.php on line 5
>
> I then invert my session_start and the include:
>
> line 10: require_once "include/Produit.php";
> line 11: session_start();
>
> and I get this warning:
>
> Warning: Cannot send session cache limiter - headers already sent
> (output
> started at [...]/Produit.php:160) in [...]/ctrlappl.php on line 11
>
> where /Produit.php is the file containing my class and line 160 is

the
> very
> last line of the file.
>
> Can someone help?
>
> Jean Vaillancourt, Mascouche


To save an object to session, use serialize() and unserialize().

--
http://www.dbForumz.com/ This article was posted by author's request
Articles individually checked for conformance to usenet standards
Topic URL: http://www.dbForumz.com/PHP-Problem...pict135175.html
Visit Topic URL to contact author (reg. req'd). Report abuse: http://www.dbForumz.com/eform.php?p=451439
steve

2004-07-31, 3:55 am

"steve" wrote:
> [quote:4e18fefa32="Jean Vaillancourt"]Hi,
>
> I have to put an object in $_SESSION and to use it later in the
> session.
>
> My class is defined in a file which I include at the beginning of

my
> program,
> just after my session has been started:
>
> session_start();
> require_once "include/Produit.php";
>
> When my program comes back, I try to get my stored object back:
>
>
> line 3: $x = new Produit();
> line 4: $x=&$_SESSION[’produit’];
> line 5: echo "*** produit:".$x -> nomFR;
>
> and I get this error:
>
> Fatal error: The script tried to execute a method or access a

property
> of an
> incomplete object. Please ensure that the class definition produit

of
> the
> object you are trying to operate on was loaded _before_ the session
> was
> started in /[...]/maj.php on line 5
>
> I then invert my session_start and the include:
>
> line 10: require_once "include/Produit.php";
> line 11: session_start();
>
> and I get this warning:
>
> Warning: Cannot send session cache limiter - headers already sent
> (output
> started at [...]/Produit.php:160) in [...]/ctrlappl.php on line 11
>
> where /Produit.php is the file containing my class and line 160 is

the
> very
> last line of the file.
>
> Can someone help?
>
> Jean Vaillancourt, Mascouche


To save an object to session, use serialize() and
unserialize().[/quote:4e18fefa32]

I believe the 2nd problem of yours relates to something being echoed
before session_start. Use something like ob_start() to cache content
(see manual).

--
http://www.dbForumz.com/ This article was posted by author's request
Articles individually checked for conformance to usenet standards
Topic URL: http://www.dbForumz.com/PHP-Problem...pict135175.html
Visit Topic URL to contact author (reg. req'd). Report abuse: http://www.dbForumz.com/eform.php?p=451440
Jean Vaillancourt

2004-07-31, 3:55 am

But I changed my object to one with absolutely no instruction.
It just had an empty constructor and no method and no variable.
And I still got the error. I don't think it's an echo problem.

Jean

Le Sat, 31 Jul 2004 03:07:09 +0200, Sebastian Lauwers a écrit_:

> Jean Vaillancourt wrote:
>
> Bonsoir, (:p)
>
> [...]
>
>
> This is just because you start the sessions after something has been
> sent to the (client's) browser.
>
> [...]
>
>
> I wish i could do more.
>
>
> HTH,
> Sebastian


steve

2004-07-31, 3:55 am

"Jean Vaillancourt" wrote:[color=darkred]
> But I changed my object to one with absolutely no instruction.
> It just had an empty constructor and no method and no variable.
> And I still got the error. I don’t think it’s an echo
> problem.
>
> Jean
>
> Le Sat, 31 Jul 2004 03:07:09 +0200, Sebastian Lauwers a écrit_:
>
> sent (output
> line 11
> been

But you did state "Warning: Cannot send session cache limiter -
headers already sent ", this means something was output already, even
html headers. This will 99% fixed if you cache using ob_start, give
it a try (one instruction, ez to do).

--
http://www.dbForumz.com/ This article was posted by author's request
Articles individually checked for conformance to usenet standards
Topic URL: http://www.dbForumz.com/PHP-Problem...pict135175.html
Visit Topic URL to contact author (reg. req'd). Report abuse: http://www.dbForumz.com/eform.php?p=451492
Jean Vaillancourt

2004-07-31, 3:55 pm

Well, it worked with serialize - unserialize.
I also put ob_start() - od_end_clean() around session_start()
and I got no warning. It was ok when I wrote @session_start() too.

I just don't understand why I got a warning (Cannot send session
cache limiter - headers already sent) with a completely empty
object. Does PHP echo something when you declare an object?

Anyway, I thank everyone for your help.

Jean

Le Fri, 30 Jul 2004 22:03:36 -0400, steve a écrit_:

> "steve" wrote:
> my
> property
> of
> the
>
> To save an object to session, use serialize() and
> unserialize().[/quote:4e18fefa32]
>
> I believe the 2nd problem of yours relates to something being echoed
> before session_start. Use something like ob_start() to cache content
> (see manual).


steve

2004-07-31, 8:55 pm

"Jean Vaillancourt" wrote:
> Well, it worked with serialize - unserialize.
> I also put ob_start() - od_end_clean() around session_start()
> and I got no warning. It was ok when I wrote @session_start() too.
>
> I just don’t understand why I got a warning (Cannot send session
>
> cache limiter - headers already sent) with a completely empty
> object. Does PHP echo something when you declare an object?
>
> Anyway, I thank everyone for your help.
>
> Jean
>
> Le Fri, 30 Jul 2004 22:03:36 -0400, steve a écrit_:
>
> the
> beginning of
> back:
> a
> produit
> session
> already sent
> line 11
> 160 is
>
> I believe the 2nd problem of yours relates to something being echoed
> before session_start. Use something like ob_start() to cache

content
> (see manual).</font>[/quote:5749aa770e]


No, I think you are echo’ing http header info. It is easy to test
(specially if you have a debugger). You can echo out the content of
ob_get_content() periodically (since you did ob_start), and it would
show you what is in the cache.

--
http://www.dbForumz.com/ This article was posted by author's request
Articles individually checked for conformance to usenet standards
Topic URL: http://www.dbForumz.com/PHP-Problem...pict135175.html
Visit Topic URL to contact author (reg. req'd). Report abuse: http://www.dbForumz.com/eform.php?p=451804
Colin McKinnon

2004-07-31, 8:55 pm

Jean Vaillancourt spilled the following:


> Warning: Cannot send session cache limiter - headers already sent (output
> started at [...]/Produit.php:160) in [...]/ctrlappl.php on line 11
>
> where /Produit.php is the file containing my class and line 160 is the
> very last line of the file.
>


Trailing whitespace/non-printable chars in the include file? Try referencing
the session before including the class definition e.g.

session_register('some_random_name');
require_once('Produit.php');
$x=&$_SESSION['produit'];

HTH

C.
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com