使用AJAX返回PHP会话ID变量

时间:2012-09-04 05:46:32

标签: php javascript ajax

我正在开发一个AJAX登录系统,我不知道如何将PHP会话变量从AJAX返回到登录页面。我的问题是,如果可能的话,如何将php变量返回到登录页面。以下是我创建的示例。

登录页面

<?php

session_start();

?>

<form>

    <input type="text" id="username" />

    <input type="text" id="password"/>

    <input type="button" id="submit" />

</form>

<script type="text/javascript" >

    $('#submit').click(function() {

var username = $('#username').val();

var password = $('#password').val();

    $.post('ajax_file.php', 
    {
    username: username,
    password:password,
    }, 
    function (data) {

    /* what do I do here that will return the php variable 
    $_SESSION['user_id'] and let the user be logged in when
    they go to homepage.php*/
    setTimeout('window.location.href="homepage.php"', 2000);
    });});

</script>

这是ajax页面。我理解逻辑对于会话变量突然冒出没有意义,让我们假设它是在页面的前面创建的。

$username = $_POST['username'];

$password = $_POST['password'];

if(login($username, $password)) {

    return $session_user_id = $_SESSION['user_id']; 

}

5 个答案:

答案 0 :(得分:2)

您可以执行AJAX帖子,将会话变量设置为接收帖子的页面中的会话,并将其存储在会话中(它是同一个会话)。在AJAX回调中将用户转发到主页。

当然,您必须考虑登录凭据不正确的情况。

答案 1 :(得分:1)

诀窍在于你的JavaScript根本不需要了解会话;您可以通过the respective ini setting将PHP配置为使用HttpOnly cookie进行会话管理。

我会像这样实现AJAX脚本:

session_start(); // start the session

if (login($username, $password)) {
    // alter session to hold user id
    $_SESSION'user_id'] = $user_id_from_database_or_something;
    return true;
} else {
    return false;
}

AJAX完整处理程序查看返回值并重定向到主页(如果它是true)。类似下面的内容(我假设PHP return被翻译成echo json_encode($return_value)

if (data) {
    // do redirect
} else {
    // login failed
}

然后,当用户访问主页时,他们的浏览器会发送一个会话cookie,以便您确定他们是否已登录。

答案 2 :(得分:0)

改善答案

FOr Jquery,USe函数

function sendAjax(showAllExist, controller) 
{

   $.ajax({
   type: "post",
   url: login.php,
   data: yourformdatacomeshere,
   beforeSend:  function() {
         //do whatever you want to do before request
    },

    error: function() {
        //display in case of error
    },

    success:  function(data) {       
       //display in case of error
    if(data!=""){
        //redirect use to home pahe
        window.location.href ='homepage.php';
    }else{
        //display login is not correct
    }

    },

    complete:  function() {
        //hide any event which you have started on beforeSend 
    }

 });     
    return true;    
}

答案 3 :(得分:0)

你不能这样做:

     $.post('ajax_file.php', 
    {
    username: username,
    password:password,
    loginSession: <?php echo  $_SESSION['user_id']; ?>
    }, 
    function (data) {
    //Check here if login is correct.
    if correct, create this variable:
   var logged= "?logged="+data.SessionID;
    /* what do I do here that will return the php variable 
    $_SESSION['user_id'] and let the user be logged in when
    they go to homepage.php*/
    setTimeout('window.location.href="homepage.php"+logged+"'", 2000);
    });})

当数据返回到没有会话ID的homepage.php时。

php脚本上的

执行此操作:

if(isset($_GET['logged'])){
  start_session();
  $_Session['LOGGED']='true';
}

答案 4 :(得分:0)

使用上面即兴回答即兴创作的方法。

你的ajax文件代码

$username = $_POST['username'];

$password = $_POST['password'];

if(login($username, $password)) {
  $session_user_id = $_SESSION['user_id'];// this is from your code
  $responseArray = array("message"=>"success","sessionId"=>$session_user_id);
}
else
{
  $session_user_id = "";
  $responseArray = array("message"=>"error","sessionId"=>$session_user_id);
}
echo json_encode ( $responseArray );
die ();

然后在ajax函数中进行以下更改。

 var frmdata = jQuery("#logindata").serialize(); // which contains the data of username and password
 jQuery.ajax({
     type : "POST"
    ,url :'ajax_file.php'
    ,data :frmdata
    ,dataType: "json"
    ,success : function(data){               

        if(data.message == "success")
            {
                //redirect it to your desire page
            }
            else
            {
                //redirect it to your login page
            }

       }
 ,beforeSend: function(html){
        // some loader goes here while ajax is processing.
       }
}); 

希望这个帮助可以随意提出任何答案。