Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP session variables not preserved with ajax

I have a one page website that uses AJAX to load new php files and update the display.

I start my php session on the main page but when I use ajax to update inner html I need those session variables for the new php file being loaded.

This post is similar to this one: PHP Session Variables Not Preserved . But I checked and my php.ini has session.use_cookies = 1

Main Page PHP:

<?php 
session_start();
if(isset($_SESSION['views']))
{$_SESSION['views']=$_SESSION['views']+1;}
else
{$_SESSION['views']=1;}
?>

After User Input I use ajax to call a php file and load a subsection of the page:

<?php    
if(isset($_SESSION['views']))
    { echo "Views: " . $_SESSION['views'];} 
    else 
    { echo "Views: NOT SET";}
?>

Can someone please tell me what important step I am missing? Thank you.

Update: After adding session_id() call to both the main and sub pages I see that both pages have the same Session_ID. However it still cannot pull the session variable and if i do assign it a value the two same name session variables stay independent of one another.

Answer to the question that this question created: I found that I had to set a static session_save path in my php.ini file. With most paid webhosting services they just have a default container for sessions but it is affected by load balancing. What a releif.

like image 240
Quinma Avatar asked Aug 01 '12 23:08

Quinma


2 Answers

I think you're missing session_start() on the page that Ajax calls.

You need:

<?php
session_start();
if(isset($_SESSION['views']))
    { echo "Views: " . $_SESSION['views'];} 
    else 
    { echo "Views: NOT SET";}
?>
like image 111
drew010 Avatar answered Sep 24 '22 09:09

drew010


You need to start session session_start() in the other PHP file also, the one you are calling through AJAX.

like image 39
Kalpesh Avatar answered Sep 22 '22 09:09

Kalpesh