2016-04-26 20 views
0

上のZendのコントローラのアクションに適切にセッションを設定する:は、私は次のようにAJAX呼び出しを持っている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は前のユーザーと同じになります...次回は3番目のユーザーとログインすると、 2番目のユーザーのID ...もしあなたが私が何を言おうとしているのか分かっていたら?私はここで間違って何をしていますか?これを修正するには?

答えて

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変数を介してアクセスすることができました。

0

私はZendの中にどのようにセッションの作品を知らないが、私はあなたがデータでセッション値を取得しますEagleEye

で行くだろうが、あなたは$ .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> 

を使用することができます以下に示すように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; 
} 
+0

については、以下のリンクを読みます? data.id ??? – perkes456

0

この

をお試しください。..行きます

クライアント側:

$.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

+0

私は別の値をデータに格納しています...その定数と私はこのように呼びます: $ this-> dieCustomerCode(Constant :: SUCCESS); 保護された関数dieCustomerCode($ statusCode){ \t echo $ statusCode; \t die(); } これは意味がありますか? – perkes456

+0

値が2つ以上ある場合は、サーバーから戻って値を配列に格納し、配列をjson_encodeに格納する必要があります。 $ response = array( 'val1' => 1、 'val2' => 2); ヘッダ( "Content-Type:application/json"); echo json_encode($ response); exit(); –

+0

クライアント側では、このようなデータにアクセスできます。 var objData = eval(data); var value1 = objData.val1; var value2 = objData.val2; –

関連する問題