Re: PHP SESSSION Not Behaving

From: Date: Sat, 18 Oct 2003 00:51:32 +0000
Subject: Re: PHP SESSSION Not Behaving
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-166573@lists.php.net to get a copy of this message
Did you try it with another browser? Make some really simple example and see if this is still happening. [-^-!-%- wrote:
Environment: Linux , PHP 4.2.3,MySql 3.23.39,Apache, and so on The Problem: I have a user authentication script that uses sessions to track the user id. Everything works fine with HTTP, but $_SESSIONS['var'] renders nothing under a secure connection (SSL). Using $_SESSION['myVar']= 'myValueGoesHere' loses its value, once I move to another page. Even when I use SESSION_START() before accessing the value (like echo $_SESSION['myVar']). The PUZZLE: If I print a character before starting the session (as we all know is illegal), the secured page will access $_SESSION['myVar'] with no problems - minus the warning messages for printing chars before session_start(). print_r($_SESSION) will display all of its content properly, but will be lost when I move to another page. Any suggestions? ===Sample CODE ===== ===Class_Page.php has === //this is a general class that handles the general site //it pretty much holds all the application's functions ... //the function AuthenticateUser() is used to valid a user's access. //if $_SESSION['userid'] exist, then the user is logged in. //otherwise, the user is prompted to login class Page { var $INFO; function Page(){
      session_start();
      ...
} . . . function AuthenticateUser(){
     if(isset($_SESSION['userid']) and !empty($_SESSION['userid']) ...){
       //user is already logged in
       $this->INFO = $this->getUserInfo($_SESSION['clientid']);
       return True;
     }else{
        $usr = $_POST['username'];  //simplified code. no security.
        $pas = $_POST['password'];
        $qry = mysql_query('select * from users where usr=$usr and
pass=$as ...) or die($this->ErrorDisplay);
        if(mysql_num_rows($qry)>0){
          $validUser = mysql_fetch_object($qry);
          session_start();
          $_SESSION['userid'] = $validUser->uid;
          $_SESSION['username'] =$validUser->uname;
          ...
          return True;
       }else{
         $_SESSION=Array();
         session_destroy();
         $this->ErrorDisplay('invaliduser');
         return False;
      }
} } //end of class //==== Privatepage.php include(class_Page.php); $page = new Page; //access control
if($page->AuthenticateUser()=='True'){    //a valid user
//display content print_r($_SESSION) //test session contents }else{ $page->ErrorDisplay('noaccess'); } The above code fails when runned as-is. However, if I print any character before testing the sesion values, it will run. Like: function AuthenticateUser(){ //normal: DOES NOT WORK session_start();
   print_r($_SESSION);    //prints empty array
//weird: WORKS with HEADER() warnings... echo ' '; session_start(); print_r($_SESSION); //prints SESSION content ... } =P e p i e D e s i g n s www.pepiedesigns.com Providing Solutions That Increase Productivity Web Developement. Database. Hosting. Multimedia.


« previous php.general (#166573) next »