Jump to content

I've never had problems with sessions, but what the heck


Recommended Posts

Ok.
I've done this alot, and it always worked beautifully, but this time it isnt working.
A log in form, and if all is correct, sessions are started.

[code]if (isset($_POST['submit'])) {
require ('connection script');
$username = $_POST['username'];
$password = $_POST['password'];

$query = "SELECT user_id, username, password FROM table WHERE username = '$username' AND password = '$password'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$num = mysql_num_rows($result);

if ( ($num >= 1) && ($row[1] === $username) && ($row[2] === $password) ) {
session_start();
$_SESSION['username'] = $username;
$_SESSION['user_id'] = $row[0];
header("Location: index.php");
} else {
echo 'Log-in failed';
}

}[/code]

I get redirected to index.php.
But in index.php, i try echoing $_SESSION['username'] but i get:"Notice: Undefined index" error
It's probably something minimal im missing, but it isn't working.

Sorry if it's too simple. I've actually been reading books in python lately and my php got rusty.

Obvious question: Have you put session_start(); in index.php?
How about using [b]session_register('username','user_id');[/b] and see if that helps.

How about using [b]print_r[/b] to see what session is, and take out the redirect for testing.
Yes. I have session_start(); in the header.php which is included in index.php.

according to php.net, "Use of session_register() is deprecated" so i try not to use it. But i used it for testing and no luck.

Now, if i take out the header() and echo the session on the same (login) page, it works. like this:
[code]
if ( ($num >= 1) && ($row[1] === $username) && ($row[2] === $password) ) {
$_SESSION['username'] = $username;
$_SESSION['user_id'] = $row[0];
echo $_SESSION['username'];
#header("Location: index.php");
} else {
echo 'Log-in failed';
}[/code]

Hmm.. not sure now, I'd start printing out the session on both ends, testing with a control page etc. but you seem competent enough that you'll be able to seek it out our show some more code, because what you have seems fine.
header:
[code]
<?php
ob_start();
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<link rel="stylesheet" type="text/css" href="includes/pirate.css" />
<script type="text/JavaScript">
<!-- AJAX call -->
var XMLHttpRequestObject = false;

if (window.XMLHttpRequest) {
XMLHttpRequestObject = new XMLHttpRequest();
} else if (window.ActiveXObject) {
XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP")
}


function getData(datafile, divID) {
if (XMLHttpRequestObject) {
var obj = document.getElementById(divID);
XMLHttpRequestObject.open("GET", datafile);

XMLHttpRequestObject.onreadystatechange = function() {
if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) {
obj.innerHTML = XMLHttpRequestObject.responseText;
}
}
XMLHttpRequestObject.send(null);
}
}


<!-- Menu RollOver Images
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
  if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
</head>

<body>

<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="top" height="136" colspan="10"> header </td>
</tr>

<tr>
<td valign="top" class="menu"> <!--menu -->
<center>
<div class="menu_header"></div>
<a href="index.php?content=home" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('home','','images/menu/home_hover.jpg',1)"><img src="images/menu/home.jpg" alt="Home" name="home" width="67" height="26" border="0" id="home" /></a><br />
<a href="index.php?content=news" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('news','','images/menu/news_hover.jpg',1)"><img src="images/menu/news.jpg" name="news" width="55" height="21" border="0" id="news" /></a><br />
<a href="index.php?content=about" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('about','','images/menu/about_hover.jpg',1)"><img src="images/menu/about.jpg" name="about" width="47" height="20" border="0" id="about" /></a><br />
<a href="#" onclick="getData('about.php', 'main_content')" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('calendar','','images/menu/calendar_hover.jpg',1)"><img src="images/menu/calendar.jpg" name="calendar" width="67" height="20" border="0" id="calendar" /></a><br />
<a href="index.php?content=forums" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('forums','','images/menu/forums_hover.jpg',1)"><img src="images/menu/forums.jpg" name="forums" width="59" height="19" border="0" id="forums" /></a><br />
<a href="index.php?content=email" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('email','','images/menu/email_hover.jpg',1)"><img src="images/menu/email.jpg" name="email" width="50" height="19" border="0" id="email" /></a><br />
  <a href="index.php?content=crew" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('crew','','images/menu/crew_hover.jpg',1)"><img src="images/menu/crew.jpg" name="crew" width="84" height="24" border="0" id="crew" /></a><br />
<a href="index.php?content=extras" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('extra','','images/menu/extrastuff_hover.jpg',1)"><img src="images/menu/extrastuff.jpg" name="extra" width="102" height="20" border="0" id="extra" /></a>
</center>
<div class="menu_footer"></div>
</td><!--/menu -->

<td valign="top">
<table border="0" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td style="width: 82px; height: 65px; background-image: url('images/main content/main_content_top_left.jpg');"></td>
<td align="left" style="height: 65px; background-image: url('images/main content/top_span.jpg');"></td>
<td style="width: 82px; height: 65px; background-image: url('images/main content/main_content_top_right.jpg');"></td>
</tr>

<tr>
<td style="width: 82px; background-image: url('images/main content/vertical_span_left.jpg');"></td>
<td id="main_content">[/code]



Index:
[code]
<?php
require_once('./includes/header.php');
@$id = $_GET['content'];

switch ($id) {
case 'home':
include('./home.html');
break;

case 'news':
include('./news.php');
break;

case 'about':
include('./about.html');
break;

case 'calendar':
include('./calendar.html');
break;

case 'home':
include('./forums.forums');
break;

case 'email':
include('./email.html');
break;

case 'crew':
include('./crew.html');
break;

case 'extras':
include('./extra.html');
break;

default:
include('./home.html');
break;

}
echo $_SESSION['username'];
require_once('./includes/footer.php');
?>[/code]

and i use ob_end_flush() in the footer.
ps: i know the use of tables for layout is lame/looked down on. but trust me, i had to use tables because css was in no way, shape or form cooperating.
[quote author=ShogunWarrior link=topic=100247.msg395489#msg395489 date=1152661923]
I think (think) that there may (may) be a conflict between session_start() and ob_start() but that's speculation, plucking at straws here.
[/quote]

I has never given me a problem though. I don't think that is it.

::edit::
I took out ob_start() and still a no-go.
[quote author=kenrbnsn link=topic=100247.msg395492#msg395492 date=1152662141]
Why don't you put the session_start() at the very start of the header.php, that way you don't even need the ob_start().

Ken
[/quote]

I actuall just tried that. and took out the header() in the login, and put index.php in the form action. but it is still not working.
Putting index.php into the form action won't populate your $_SESSION.

Create another index.php (after saving you're current one) with the following code:
[code]<?php
session_start();
echo '<pre>' .print_r($_SESSION,true). '</pre>';
?>[/code]

Use the header() method to get to this file.

If that works (and it should) start adding your code back in and see where it breaks.

Ken
Hmmm, it works for me with these pages, modifications of yours:

Start:
[code]
<?php
                $username = 'joan';
                $password = 'tinky';

                if ( $password!=false) {
                        session_start();
                        $_SESSION = array();
                        $_SESSION['username'] = $username;
                        $_SESSION['user_id'] = $password;
                        header("Location: idx.php");
                } else {
                        echo 'Log-in failed';
                }
[/code]

Index:
[code]
<?php

require('header.php');

$id = 'home';

switch ($id) {
        case 'home':
                echo('./home.html');
                break;

        case 'news':
                echo('./news.php');
                break;

        case 'about':
                echo('./about.html');
                break;

        case 'calendar':
                echo('./calendar.html');
                break;

        case 'home':
                echo('./forums.forums');
                break;

        case 'email':
                echo('./email.html');
                break;

        case 'crew':
                echo('./crew.html');
                break;

        case 'extras':
                echo('./extra.html');
                break;

        default:
                echo('./home.html');
                break;

}

echo $_SESSION['username'];

ob_flush();
?>
[/code]

Header:
[code]
<?php
ob_start();
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<link rel="stylesheet" type="text/css" href="includes/pirate.css" />
<script type="text/JavaScript">
<!-- AJAX call -->
var XMLHttpRequestObject = false;

if (window.XMLHttpRequest) {
        XMLHttpRequestObject = new XMLHttpRequest();
} else if (window.ActiveXObject) {
        XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP")
}


function getData(datafile, divID) {
        if (XMLHttpRequestObject) {
                var obj = document.getElementById(divID);
                XMLHttpRequestObject.open("GET", datafile);

                XMLHttpRequestObject.onreadystatechange = function() {
                        if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) {
                                obj.innerHTML = XMLHttpRequestObject.responseText;
                        }
                }
                XMLHttpRequestObject.send(null);
        }
}


<!-- Menu RollOver Images
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
  if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
</head>

<body>

<table width="100%" cellpadding="0" cellspacing="0" border="0">
        <tr>
                <td class="top" height="136" colspan="10"> header </td>
        </tr>

        <tr>
                <td valign="top" class="menu"> <!--menu -->
                        <center>
                                <div class="menu_header"></div>
                                <a href="index.php?content=home" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('home','','images/menu/home_hover.jpg',1)"><img src="images/menu/home.jpg" alt="Home" name="home" width="67" height="26" border="0" id="home" /></a><br />
                                <a href="index.php?content=news" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('news','','images/menu/news_hover.jpg',1)"><img src="images/menu/news.jpg" name="news" width="55" height="21" border="0" id="news" /></a><br />
                                <a href="index.php?content=about" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('about','','images/menu/about_hover.jpg',1)"><img src="images/menu/about.jpg" name="about" width="47" height="20" border="0" id="about" /></a><br />
                                <a href="#" onclick="getData('about.php', 'main_content')" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('calendar','','images/menu/calendar_hover.jpg',1)"><img src="images/menu/calendar.jpg" name="calendar" width="67" height="20" border="0" id="calendar" /></a><br />
                                <a href="index.php?content=forums" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('forums','','images/menu/forums_hover.jpg',1)"><img src="images/menu/forums.jpg" name="forums" width="59" height="19" border="0" id="forums" /></a><br />
                                <a href="index.php?content=email" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('email','','images/menu/email_hover.jpg',1)"><img src="images/menu/email.jpg" name="email" width="50" height="19" border="0" id="email" /></a><br />
                                  <a href="index.php?content=crew" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('crew','','images/menu/crew_hover.jpg',1)"><img src="images/menu/crew.jpg" name="crew" width="84" height="24" border="0" id="crew" /></a><br />
                                <a href="index.php?content=extras" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('extra','','images/menu/extrastuff_hover.jpg',1)"><img src="images/menu/extrastuff.jpg" name="extra" width="102" height="20" border="0" id="extra" /></a>
                        </center>
                        <div class="menu_footer"></div>
                </td><!--/menu -->

                <td valign="top">
                        <table border="0" width="100%" cellpadding="0" cellspacing="0">
                        <tr>
                        <td style="width: 82px; height: 65px; background-image: url('images/main content/main_content_top_left.jpg');"></td>
                        <td align="left" style="height: 65px; background-image: url('images/main content/top_span.jpg');"></td>
                        <td style="width: 82px; height: 65px; background-image: url('images/main content/main_content_top_right.jpg');"></td>
                          </tr>

                        <tr>
                        <td style="width: 82px; background-image: url('images/main content/vertical_span_left.jpg');"></td>
                        <td id="main_content">
[/code]

It will output "joan" on idx.php as it should so because the database stuff is working, that doesn't matter that I changed it, so is there a problem with the persistency of sessions on the server?
Are you using linux? I am having problems with sessions not even working on my local linux install of Fedora at this moment in time, which is causing no end of hassles since i need to "present" this afternoon. I understand there are some settings somewhere for it, but since no-one is having any joy with your code, maybe it's not the code but other factors at work?

If i get a reply on this from elsewhere (asked on a linux forum about sessions and php) then I'll post what i get told here too - just incase.
This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.