开发者

returning php session to ajax

I am having trouble getting jQuery ajax to recognise a session. I am creating a php session from a login script, but what is happening is that when ajax loads the authenticated page, the session is always unset. For example, in the secure page, if I refresh the page, the session id changes each time. I have session_start(); in each page. Can someone please show me the correct way to handle sessions with ajax and php? I have spent 2 days and have used google so much, I will probably get an invite to there xmas lunch :-) I have included the relevant code and would be grateful for any help. Thanks

PS. If it makes any difference, I am trying to develop mobile app using jquery mobile.

login html js

$(function() {
    $("#kt_login1").click(function() {
        var user = $('#user').val();
        var pass = $('#pass').val();
        if (user == '') {
            $("#login_message").html('This field cannot be empty')
            $('label[for=user]').addClass("label")
            return false;
        }
        else if (pass == '') {
            $("#login_message").html('This field cannot be empty')
            $('label[for=pass]').addClass("label")
            return false;
        }
        else $('label[for=user]').removeClass("label");
        $('label[for=pass]').removeClass("label");

        //alert(user + pass + ok);
        data = 'user=' + user + '&pass=' + pass;
        $.ajax({
            type: "POST",
            url: "testajax.php",
            cache: false,
            data: data,
            success: function(data) {
                if (data == 'authenticated') {
 开发者_如何学运维                   //alert(user);
                    document.location = 'secure.php';
                }
                else $('#login_message').html('You are not authorised');

                //$(ok).val('Logged In');
                //$("#login").get(0).reset();
                //$("#form").dialog('close');
            },
            error: function(xhr, ajaxOptions, thrownError) {
                jAlert('There was an exception thrown somewhere');
                alert(xhr.status);
                alert(thrownError);
            }
        });
        return false;
    });
});

testajax.php

<?php

// test wether the user session is already set
$username = mysql_real_escape_string($_POST['user']);
$pass = mysql_real_escape_string(md5($_POST['pass']));

mysql_connect('localhost', 'root', '');
mysql_select_db('sample');

//now validating the username and password
$sql="SELECT * FROM user_usr WHERE username_usr='$username' and password_usr='$pass'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);

//if username exists
if(mysql_num_rows($result)>0) {
    session_start();
    $_SESSION['u_name']=$row['name_usr'];
    /*
    echo '<pre>';
    print_r( $_SESSION['u_name'] );
    print_r( $_REQUEST );

    echo '</pre>';
    exit;
     */
    echo 'authenticated';
}
else
{
  echo 'Unknown User';
}
?>

+++++SOLUTION+++++

Changed form input from submit to button and voila. All ok


you have to call session_start() each time working with a session (not only when creating it)

see: http://php.net/manual/en/function.session-start.php


There are a whole load of reasons this might be the case - but you're code is upside down! This may well be the cause (or a contributory factor).

You should not treat the existence of a session as evidence of authentication (the contents of the session is another thing altogether). Call session_start() at the top of your script - not conditionally, half-way through.

As to why your session data is not available...that's an FAQ here - have a look at some of the previous answers for potential causes / how to investigate.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜