I'm relatively new to php and am just starting to learn about sessions. But when i try make a session it doesn't seem to carry its variables over to the next page..

I've tried it several ways and neither of them seem to work..

Here's my code...

Page 1:

<?php
session_start();
$HTTP_SESSION_VARS['sess_var'] = "Hello world!";
echo 'The content of $HTTP_SESSION_VARS[\'sess_var\'] is '

    .$HTTP_SESSION_VARS['sess_var'].'<br />';

?>
<a href="page2.php">Next page</a>

Page 2: this page does not display the sess_var

<?php
session_start();
echo 'The content of $HTTP_SESSION_VARS[\'sess_var\'] is '

    .$HTTP_SESSION_VARS['sess_var'].'<br />';

?>

<a href="page3.php">Next page</a>

So I tried it another way coping some code from another thread i saw on the forum...

Page 1.

<?php

//page1.php

//declare the variables or get them from a $GET or $POST

$name = "pinehead18";

$email = "pinehead18@pinehead18.com";

$ok = "yes";

// initialize the session variables

session_start();

if(!isset($_SESSION['vars'])){

// if its not set, create a new array to hold its values 

$vars = array(); 

$vars['name'] = $name; 

$vars['email'] = $email; 

$vars['ok'] = $ok; 

}

$_SESSION['vars'] = $vars;

echo "<a href=\"page2.php\">goto page 2</a>";

?>

Page 2

<?php

//page2.php

session_start();

$vars = $_SESSION['vars']; 

        echo "name:  " . $vars['name'];

$_SESSION['vars'] = $vars; 

echo "<a href=\"page3.php\">goto page 3</a>";

?>

Page 3

<?php

//page3.php

session_start(); 

print_r($_SESSION['vars']) 

?>

print_r is not outputting any data at all. Please help!!

Below is my session section of my php.ini file.If there's anything I need to reconfigure please let me know

Session extract of php.ini

[Session]
; Handler used to store/retrieve data.
session.save_handler = files

; Argument passed to save_handler. In the case of files, this is the
path
; where data files are stored. Note: Windows users have to change this
; variable in order to use PHP's session functions.
session.save_path = /tmp

; Whether to use cookies.
session.use_cookies = 1

; This option enables administrators to make their users invulnerable to

; attacks which involve passing session ids in URLs; defaults to 0.
; session.use_only_cookies = 1

; Name of the session (used as cookie name).
session.name = PHPSESSID

; Initialize session on request startup.
session.auto_start = 0

; Lifetime in seconds of cookie or, if 0, until browser is restarted.
session.cookie_lifetime = 0

; The path for which the cookie is valid.
session.cookie_path = /

; The domain for which the cookie is valid.
session.cookie_domain =

; Handler used to serialize data. php is the standard serializer of
PHP.
session.serialize_handler = php

; Define the probability that the 'garbage collection' process is
started
; on every session initialization.
; The probability is calculated by using gc_probability/gc_dividend,
; e.g. 1/100 means 1%.

session.gc_probability = 1
session.gc_dividend = 1000

; After this number of seconds, stored data will be seen as 'garbage'
and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 1440

; PHP 4.2 and less have an undocumented feature/bug that allows you to
; to initialize a session variable in the global scope, albeit
register_globals
; is disabled. PHP 4.3 and later will warn you, if this feature is
used.
; You can disable the feature and the warning seperately. At this time,
; the warning is only displayed, if bug_compat_42 is enabled.

session.bug_compat_42 = 0
session.bug_compat_warn = 1

; Check HTTP Referer to invalidate externally stored URLs containing
ids.
; HTTP_REFERER has to contain this substring for the session to be
; considered as valid.
session.referer_check =

; How many bytes to read from the file.
session.entropy_length = 0

; Specified here to create the session id.
session.entropy_file =

;session.entropy_length = 16

;session.entropy_file = /dev/urandom

; Set to {nocache,private,public,} to determine HTTP caching aspects.
; or leave this empty to avoid sending anti-caching headers.
session.cache_limiter = nocache

; Document expires after n minutes.
session.cache_expire = 180

; trans sid support is disabled by default.
; Use of trans sid may risk your users security.
; Use this option with caution.
; - User may send URL contains active session ID
; to other person via. email/irc/etc.
; - URL that contains active session ID may be stored
; in publically accessible computer.
; - User may access your site with the same session ID
; always using URL stored in browser's history or bookmarks.
session.use_trans_sid = 0

; The URL rewriter will look for URLs in a defined set of HTML tags.
; form/fieldset are special; if you include them here, the rewriter will
; add a hidden <input> field with the info which is otherwise appended
; to URLs. If you want XHTML conformity, remove the form entry.
; Note that all valid entries require a "=", even if no value follows.
url_rewriter.tags =
"a=href,area=href,frame=src,input=src,form=fakeentry"

    I'm no guru but I think you're making it more complicated than it is

    Try using the session_resister() function eg.

    Page 1
    <?
    session_start();
    session_register('myvariable');

    $myvariable = "helloworld";
    ?>

    Page 2
    <?
    session_start();

    echo "$myvariable";
    ?>

    Also remember that with sessions you cannot reassign a variable using GET or POST. It has to be done explicitly. eg on page 2
    $myvariable ="somethingelse";

    HTH

    Rob

      Thanks rob76,

      I will try it but I've given something similar ago before with global variables set to On in my php.ini file...since i didn't think session_register() worked if they weren't switched on...

      And it didn't work then either..

        Yes you're right. Register globals must be enabled for session_register() to work.

        One way round it (has worked for me in the past) although not the best answer is to turn register globals on. If you don't have access to your php.ini files you can put an .htaccess file in the root directory with the line:

        php_value register_globals 1

        Assuming your provider is running Apache, this will work.

        Good luck

        Rob

          At this stage in the project I'm onlyworking locally so I have control of the php.ini file. But it still doesn't work....

          All i can think of is that it is something in the php.ini file that is not set-up properly.... I'm working on a PC, win2000 Apache 4.3.

          Does anyone know if there is something that I need to set-up for sessions to work properly?

          Thanks for any help!

            Well if you are using Windows, your session save path is wrong:

            session.save_path = /tmp

            Should be for example:

            session.save_path = c:/tmp

            And dont put the register_globals on. Its safer and cleaner to code the right way(you always know where variables are from eg. $GET, $POST,$SESSION etc.). Also dont use session_register() because thats also the wrong way to use sessions.

            // Page1
            session_start();
            $_SESSION['var']='test';
            echo '<a href="page2.php">Page 2</a>';
            
            // page 2
            session_start();
            echo $_SESSION['var'];
              2 months later

              I'm developing a page with Apache 1.3.X and php-4.3.4,
              under Windows 2000 professional.

              In my php.ini file I had set the session_path="C:\php\sessions"
              when I start the session with:

              <?php
              session_start();
              $_SESSION['myvar]='Some string';
              echo '<a href="test.php">Test</a>';
              ?>

              This creates a file with the name:
              sess_56#######.....etc.
              When I edit it is says:
              myvar|s:11:"Some string"
              However, when I hit the Test link on my page
              the value does not exists in the new page, and
              it creates me a new session file in the session folder.

              The code for the test.php file is:
              <?php
              session_start();
              echo $_SESSION['myvar'];
              ?>

              Any help will be appreciated.

              MAGO

                What configuration do you have in php.ini for sessions? Do you have cookies enabled in your browser? Code is correct so the problem must be in either one of those.. You can also try to add constant SID after your link(echo '<a href="test.php?'.SID.'"...)

                I made a webshop that didnt work correctly with IE(it lost the session data randomly). session.use_trans_sid was turned on but it didnt still work, I had to add the SID manually to links..

                  Write a Reply...