Solved

PHP Session doen'st get set

Posted on 2013-02-01
8
232 Views
Last Modified: 2013-10-12
Hi ,
I need a simple visitor counter ,
I put this code in my index.php

<?php

if(isset($_SESSION['views'])){
        $_SESSION['views']=$_SESSION['views']+1;
        echo "session is isset : Views=". $_SESSION['views']. "<BR><BR>";
} else {
        $_SESSION['views']=1;
        echo "session is Not set : Views=". $_SESSION['views']. "<BR><BR>";
}
?>

but every-time that I go back browsing that page, I get the message :
session is Not set : Views = 1

Thanks
0
Comment
Question by:fparvini
8 Comments
 
LVL 11

Expert Comment

by:mcnute
ID: 38844528
add session_start(); at the top of your script.

<?php
session_start();
if(isset($_SESSION['views'])){
        $_SESSION['views']=$_SESSION['views']+1;
        echo "session is isset : Views=". $_SESSION['views']. "<BR><BR>";
} else {
        $_SESSION['views']=1;
        echo "session is Not set : Views=". $_SESSION['views']. "<BR><BR>";
}
?>

Open in new window

0
 

Author Comment

by:fparvini
ID: 38844582
Thanks , I have it (and then removed) , but still doesn't work
I also added some debugging , as follows :


<?php

$a = session_id();
if(empty($a)) session_start();
echo "SID: ".SID."<br>session_id(): ".session_id()."<br>COOKIE: ".$_COOKIE["PHPSESSID"];

if(isset($_SESSION['views'])){
        $_SESSION['views']=$_SESSION['views']+1;
        echo "isset Views=". $_SESSION['views']. "<BR><BR>";
} else {
        $_SESSION['views']=1;
        echo "Not set Views=". $_SESSION['views']. "<BR><BR>";
}

?>

but everytime I get different ids

SID: PHPSESSID=clfrk1b0heon60e23lsnrie613
session_id(): clfrk1b0heon60e23lsnrie613
COOKIE: Not set Views=1


SID: PHPSESSID=j2qai0obf52ch6c8cfq4bh23s2
session_id(): j2qai0obf52ch6c8cfq4bh23s2
COOKIE: Not set Views=1
0
 
LVL 11

Expert Comment

by:mcnute
ID: 38844592
If you do a var_dump($_SESSION); what does it say? Put it preferably on the end fo your script.
0
 

Author Comment

by:fparvini
ID: 38844635
First time visiting page :

SID: PHPSESSID=ogusctqkfqqirtfefjojko2vt7
session_id(): ogusctqkfqqirtfefjojko2vt7
COOKIE: Not set Views=1

array(1) { ["views"]=> int(1) }


second time :
SID: PHPSESSID=08r9t5c91ne0jpd9mlkgmrv3j3
session_id(): 08r9t5c91ne0jpd9mlkgmrv3j3
COOKIE: Not set Views=1

array(1) { ["views"]=> int(1) }
0
What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

 
LVL 27

Expert Comment

by:Lukasz Chmielewski
ID: 38844649
You have to set seeeion start at the top

<?php
session_start();

mcnute's example is working, try refreshing the page few times.
A possible reason for your issue would be revealed when setting
error_reporting(E_ALL);
at the top also.
0
 
LVL 11

Expert Comment

by:mcnute
ID: 38844656
Ahahaaa, now I get where the flaw is: You cannot count visitors with storing the number of visitors in a session variable. You can start with this project. Simple and easy:

http://code.google.com/p/simphp/
0
 
LVL 108

Expert Comment

by:Ray Paseur
ID: 38844664
Let's run this test to see if your session handler is working correctly.  Install this script and run it a few times.  Click the appropriate places.  If the "cheese" counter increments predictably your session works and the problem lies elsewhere in the code.

<?php // RAY_session_test.php
error_reporting(E_ALL);


// DEMONSTRATE HOW PHP SESSIONS WORK
// MAN PAGE HERE: http://php.net/manual/en/function.session-start.php


// START THE SESSION (DO THIS FIRST, UNCONDITIONALLY, IN EVERY PHP SCRIPT ON EVERY PAGE)
session_start();

// INITIALIZE THE SESSION ARRAY TO SET A DEFAULT VALUE
if (empty($_SESSION["cheese"])) $_SESSION["cheese"] = 1;

// SEE IF THE CORRECT SUBMIT BUTTON WAS CLICKED
if (isset($_POST['fred']))
{
    // ADD ONE TO THE CHEESE
    $_SESSION['cheese']++;
}

// RECOVER THE CURRENT VALUE FROM THE SESSION ARRAY
$cheese = $_SESSION['cheese'];


// END OF PROCESSING SCRIPT - CREATE THE FORM USING HEREDOC NOTATION
$form = <<<ENDFORM
<html>
<head>
<title>Session Test</title>
</head>
<body>
Currently, SESSION["cheese"] contains: $cheese<br/>
<form method="post">
<input type="submit" value="increment this cheese" name="fred"  />
<input type="submit" value="leave my cheese alone" name="john" />
</form>
</body>
</html>
ENDFORM;

echo $form;

Open in new window

0
 
LVL 12

Accepted Solution

by:
Mohamed Abowarda earned 200 total points
ID: 38846495
Report all errors using:
error_reporting(-1);

Open in new window


Create test.php and use the following code:
// File: test.php
error_reporting(-1);
session_write_close();
session_start();
$_SESSION['test'] = 'Session data...';
echo $_SESSION['test'];

Open in new window


The above code should outputs: "Session data..."

If the above code doesn't work, then you probably have configuration problem, perhaps the timeout is set to expire instantly?
0

Featured Post

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

Things That Drive Us Nuts Have you noticed the use of the reCaptcha feature at EE and other web sites?  It wants you to read and retype something that looks like this.Insanity!  It's not EE's fault - that's just the way reCaptcha works.  But it is …
These days socially coordinated efforts have turned into a critical requirement for enterprises.
Learn the basics of while and for loops in Python.  while loops are used for testing while, or until, a condition is met: The structure of a while loop is as follows:     while <condition>:         do something         repeate: The break statement m…
The viewer will learn how to count occurrences of each item in an array.

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now