object in $_SESSION [message #174399] |
Fri, 10 June 2011 08:02 |
Jivanmukta
Messages: 20 Registered: January 2011
Karma: 0
|
Junior Member |
|
|
Hello,
I need your opinions about my solution of some programming probem. I
have little experience in web developement and PHP.
I have a page insert_send.html with a form. The user enters into the
form path of HTML file with bank statement and presses submit button.
Then import_statement.php program is executed. The program imports
bank statement into Statement object (which is complicated task) and
runs:
$_SESSION['statement'] = serialize($statement);
headerLocation('send_emails.php');
Then send-emails.php program is executed. It runs:
$statement = unserialize($_SESSION['statement'];
and sends emails according to statement positions (which is
complicated task, too).
My question: is the method of transferring Statement object through
session array acceptable in my case? One man told me that passing
objects through sessions is usually an error, but I don't know why.
I decided to separate importing of bank statement and sending emails
into two different files becase of complexity of these tasks.
Please help. Thanks in advance.
newbie
|
|
|
Re: object in $_SESSION [message #174401 is a reply to message #174399] |
Fri, 10 June 2011 09:20 |
Erwin Moller
Messages: 228 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On 6/10/2011 10:02 AM, Jivanmukta wrote:
> Hello,
> I need your opinions about my solution of some programming probem. I
> have little experience in web developement and PHP.
> I have a page insert_send.html with a form. The user enters into the
> form path of HTML file with bank statement and presses submit button.
> Then import_statement.php program is executed. The program imports
> bank statement into Statement object (which is complicated task) and
> runs:
> $_SESSION['statement'] = serialize($statement);
> headerLocation('send_emails.php');
> Then send-emails.php program is executed. It runs:
> $statement = unserialize($_SESSION['statement'];
> and sends emails according to statement positions (which is
> complicated task, too).
> My question: is the method of transferring Statement object through
> session array acceptable in my case? One man told me that passing
> objects through sessions is usually an error, but I don't know why.
Hi,
You must make sure that your object:
1) is defined (it's class is defined) BEFORE starting the session (via
session_start() that is. Do not use autostart in such scenarios)
2) You object cannot contain references to file-handles,
databaseconnections, etc. Only "plain" date that can be serialized.
So it can be done, but I never found myself in a situation where I
needed it.
So I tend to agree with the abovementioned "One man": Don't, unless you
must for some reason.
Regards,
Erwin Moller
> I decided to separate importing of bank statement and sending emails
> into two different files becase of complexity of these tasks.
> Please help. Thanks in advance.
>
> newbie
--
"That which can be asserted without evidence, can be dismissed without
evidence."
-- Christopher Hitchens
|
|
|
Re: object in $_SESSION [message #174404 is a reply to message #174399] |
Fri, 10 June 2011 10:46 |
Jerry Stuckle
Messages: 2598 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On 6/10/2011 4:02 AM, Jivanmukta wrote:
> Hello,
> I need your opinions about my solution of some programming probem. I
> have little experience in web developement and PHP.
> I have a page insert_send.html with a form. The user enters into the
> form path of HTML file with bank statement and presses submit button.
> Then import_statement.php program is executed. The program imports
> bank statement into Statement object (which is complicated task) and
> runs:
> $_SESSION['statement'] = serialize($statement);
> headerLocation('send_emails.php');
> Then send-emails.php program is executed. It runs:
> $statement = unserialize($_SESSION['statement'];
> and sends emails according to statement positions (which is
> complicated task, too).
> My question: is the method of transferring Statement object through
> session array acceptable in my case? One man told me that passing
> objects through sessions is usually an error, but I don't know why.
> I decided to separate importing of bank statement and sending emails
> into two different files becase of complexity of these tasks.
> Please help. Thanks in advance.
>
> newbie
You don't have to serialize() the object; just storing it in the session
is sufficient.
Erwin's comments about what the object can contain are very valid.
However, I don't consider it an error to pass an object through a
session; it's no different than any other variable. And often it is
more efficient to pass the entire object through the session than doing
something like passing an id and rebuilding the object from a database
query.
The real "problem" here is PHP's handling of objects. When your script
ends, PHP calls the destructor for the class. But when it is
deserialized, PHP does not call the constructor. This creates a
situation where there can be more destructors called than constructors -
a clear violation of OO principals.
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex(at)attglobal(dot)net
==================
|
|
|
Re: object in $_SESSION [message #174409 is a reply to message #174401] |
Fri, 10 June 2011 13:43 |
Gregor Kofler
Messages: 69 Registered: September 2010
Karma: 0
|
Member |
|
|
Am 2011-06-10 11:20, Erwin Moller meinte:
> So it can be done, but I never found myself in a situation where I
> needed it.
> So I tend to agree with the abovementioned "One man": Don't, unless you
> must for some reason.
I frequently store objects in sessions, and have (when taking the
mentioned restrictions into account) never encountered any problems.
Gregor
--
http://vxweb.net
|
|
|
Re: object in $_SESSION [message #174411 is a reply to message #174409] |
Fri, 10 June 2011 16:19 |
Jivanmukta
Messages: 20 Registered: January 2011
Karma: 0
|
Junior Member |
|
|
> I frequently store objects in sessions, and have (when taking the
> mentioned restrictions into account) never encountered any problems.
I have one more question: is there any limit for maximum size of
object in $_SESSION. I haven't found answer in manual but I have read
somewhere in Internet that there's no such limit (there's only limit
for memory PHP can serve).
I ask because if HTML bank statement contains many positions, I will
have big $statement object.
|
|
|
Re: object in $_SESSION [message #174412 is a reply to message #174411] |
Fri, 10 June 2011 16:34 |
Jerry Stuckle
Messages: 2598 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On 6/10/2011 12:19 PM, Jivanmukta wrote:
>> I frequently store objects in sessions, and have (when taking the
>> mentioned restrictions into account) never encountered any problems.
>
> I have one more question: is there any limit for maximum size of
> object in $_SESSION. I haven't found answer in manual but I have read
> somewhere in Internet that there's no such limit (there's only limit
> for memory PHP can serve).
> I ask because if HTML bank statement contains many positions, I will
> have big $statement object.
There's no real size limit, other than memory usage. However, it's not
a good idea to store huge amounts of data in the $_SESSION; it can take
along time to serialize/write/read/deserialize it.
I put what's necessary in it. What may or may not be required I put in
a database. For instance, I will store a $user object in the $_SESSION,
but it contains minimal information (i.e. userid, privileges, etc.).
Other things I fetch as necessary.
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex(at)attglobal(dot)net
==================
|
|
|
Re: object in $_SESSION [message #174413 is a reply to message #174411] |
Fri, 10 June 2011 16:41 |
Gregor Kofler
Messages: 69 Registered: September 2010
Karma: 0
|
Member |
|
|
Am 2011-06-10 18:19, Jivanmukta meinte:
>> I frequently store objects in sessions, and have (when taking the
>> mentioned restrictions into account) never encountered any problems.
>
> I have one more question: is there any limit for maximum size of
> object in $_SESSION. I haven't found answer in manual but I have read
> somewhere in Internet that there's no such limit (there's only limit
> for memory PHP can serve).
> I ask because if HTML bank statement contains many positions, I will
> have big $statement object.
The session data is frequently stored on the server's file system, which
will hardly become the bottleneck. If your data would become too big to
store in the session, PHP will have killed your script with an out of
memory error long before. You can control the memory made available for
PHP scripts with the memory_limit setting in your PHP configuration file.
Gregor
--
http://vxweb.net
|
|
|