在 AJAX 调用的 zend 控制器操作中正确设置会话


Setting session properly in zend controller action on AJAX call

我有一个像下面这样的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......如果你们明白我想说什么?我在这里做错了什么??如何解决这个问题?

试试这个

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

我会选择鹰眼

您将在数据中获取会话值,但您可以使用 $.post jquery 调用。

<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;
}

也许是因为$.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 变量访问它。