在AJAX调用

时间:2016-04-26 12:27:51

标签: javascript php jquery ajax zend-framework

我有一个像下面这样的ajax调用:

$.post("/user/signindo",{'username':username,"password":password},function(data){
//doing something with the response
// Now I need to access the session variable
<?=echo("$_Session['id']")?>
}

并且控制器中的操作看起来像这样

public function signindo()
{
$_Session['id'] = 1;  // this value is assigned dynamically when the user logs in
// example of setting session to 1
}

奇怪的是,一旦用户登录,该值将被分配正确的ID ...下次我与不同的用户登录时,ID与前一个用户保持相同...下次我使用第三个用户登录,我获得了第二个用户的ID ...如果你们了解我想说的话?我在这做错了什么?如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

也许是因为$.post是异步的,并且在设置会话之前调用了javascript函数,因此是旧的id。 使用$.ajax时,它应该有效。

$.ajax({
    url: '/user/signindo',
    data: {'username':username,"password":password},
    async: false,
    success: function(data) {
        // maybe do something with data
    }
});

您还可以在PHP函数中返回id,并通过data变量访问它。

答案 1 :(得分:0)

我会选择EagleEye

您将获得数据中的会话值,但您可以使用$ .post jquery call ..

<script>
$.post("/user/signindo",{username:username,password:password},function(data){

     //case1 - output
     //console.log(data);//1

     //case2 - output 
     console.log(data);//{id:1,name:joe}
     console.log(data.id);//1 
     console.log(data.name);//joe                 
}
</script>

在登录中我不知道会话如何在zend中工作,但在corePHP中它如下所示..

<?php

public function signindo()
{
    //case 1
    //session_start();
    //$_SESSION['id'] = 1; //Not in small $_Session
    //echo $_SESSION['id'];

    //case 2
    $test_array = array('id'=>1,'name'=>'joe');
    echo json_encode($test_array);
    exit;
}

答案 2 :(得分:0)

试试这个

public function signindo()
{
    $namespace = new Zend_Session_Namespace(); 
    $namespace->id = 1;
    echo $namespace->id;
    exit;
}

客户方:

$.post("/user/signindo",{'username':username,"password":password},function(data){    
//data will be your session id
}

阅读以下链接,了解有关Zend会话的详细信息

http://framework.zend.com/manual/1.12/en/zend.session.basic_usage.html