Link to home
Start Free TrialLog in
Avatar of beridius
beridius

asked on

php session

For some reason this code is not restarting the session as the detail for previous page
<?php

if (isset($_SESSION['previous'])) {
   if (basename($_SERVER['PHP_SELF']) != $_SESSION['previous']) {
        session_destroy();
   }
}

session_start(); 
?> 

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Loganathan Natarajan
Loganathan Natarajan
Flag of India image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of FrankoH
FrankoH

session_start()  should be before your conditional. Your isset() conditional will always return false because your session variable wont be initialized before testing it is set.
Avatar of beridius

ASKER

yes I have tired that with no luck
you can also destroy the session and redirect to another page where you can start the session again..
Try
var_dump($_SESSION);

Open in new window


To see what is actually stored in the $_SESSION array
otherwise, try

unset($_SESSION['previous']);
Here is the basic rules of how to use sessions.

1. Use session_start() unconditionally at the top of all of your scripts without exception.  No excuses.
2. Put information into the $_SESSION variable.  You can put all sorts of information in there, but certain kinds do not make sense, such as resource data types.
3. Expect to find the information in the $_SESSION variable across requests.

That's it.  That is everything.  Don't do anything else.  It is just that easy.  

Now let's get to some ways to really muck things up.  

First you need to know that the $_SESSION array is not immutable.  In my opinion, using $_SESSION before calling session_start() should trigger a fatal error, but PHP does not work that way.  So the original code snippet was silent about the fact that you have the instructions out of order.  

Next, you need to know that the contents of $_SESSION are created by PHP from stored data.  So if you put something into the $_SESSION array and then call session_start() what would you expect to find in the $_SESSION array?  I don't know either.  

Third, the session handler relies on cookies.  Cookies are part of the HTTP headers.  You cannot write headers if you have created any browser output (even invisible whitespace).  So if your script looks like this, your session will not work, because the line-feed between these two lines is browser output.

<?php /* SOMETHING */ ?>
<?php session_start();

Fortunately there are not many session-related functions and you can read the man pages for all of them in less than 15 minutes.  They are all linked from the left side of this page.
http://php.net/manual/en/function.session-start.php

One last note.  If you rely on an unset part of the session array, you will never know, because PHP will be silent about the use of undefined variables.  For that reason you want to add error_reporting(E_ALL) to the top of your script.  Put it right after <?php and right before session_start();

Best regards, ~Ray
To quote ID:37249052: yes I have tired that with no luck

Eh?