1

JQueryで記述されたモバイルアプリケーションのセッションを作成するのに問題があります。アプリケーションにユーザーセッションが存在するかどうかを確認してもらいたいのですが、存在しない場合は、ユーザーをログインフォームにリダイレクトします。ajaxを使用してログイン資格情報を確認すると、ユーザーの詳細がJSON形式で返されます。

これらのJSON変数をセッションに保存して、アプリ内でこれらにアクセスできるようにするにはどうすればよいですか?

function ajaxPost(LoadUrl, redirect) {
    jQuery.ajax({ 
        type: "POST", 
        url: LoadUrl, 
            data: "email=" + $("#email").val() + "&pw=" + $("#pw").val(),
            complete: function(xhr, statusText){ 
                if (xhr.status == 401){     
                    alert('Unauthorised');
                } 
        } ,

        success:function(response){ 
                if(redirect != null){
                    alert(response);
                    <? 
                    //session_start(); 
                    //$_SESSION['user'] = $response;  // this is JSON: {"id":"45454","name":"Joe Blog","username":"joebloguser"} 
                    ?>
                   app.navigate(redirect);

                }
            }
    });                 
}

PHPセッションを開始するPHPコードをコメントアウトしました。これは、ajax呼び出しが行われたかどうかに関係なくセッションを開始するように見えるため、常に$ _SESSIONセットがありますが、これは明らかに望ましくありません。誰かがこれを進めるための最良の方法についてアドバイスできますか?

4

2 に答える 2

1

このようなphpをjavascriptの間に置くと、ページが最初にロードされた瞬間(javascriptが実行される前...)に実行されるため、機能しません。

loadUrlセッションロジックをスクリプトに移動する必要があります。そこでログインを確認し、必要に応じてセッションを開始します。

于 2012-06-19T14:46:46.427 に答える
1

この問題に取り組む方法はいくつかあります(問題は、埋め込まれたJSスクリプトとサーバー側にあるPHPデータ間の即時通信です)

1つの方法は、JSON文字列がセッションに存在する場合は非表示要素にエコーし、jqueryを使用してフェッチし、存在する場合はオブジェクトリテラルに解析することです。

PHP:

<?php
if(isset($_SESSION['some_var'])) {
?>
<div id="#jsondata">
<?php echo json_encode($_SESSION['some_var']); ?>
</div>

JS

var jsonData = JSON.parse($('#jsondata').html());

PHPはこのデータをすぐに出力するため、PHPがブラウザーへの出力を終了すると、DOMにレンダリングされ、JQueryが起動すると、読み取り用に存在します。明らかに、これによりソースコード内のデータ構造が公開されるため、このアプローチを利用する際に考慮すべき点があります。

もう1つは、存在する場合はユーザーデータを出力し、jsonとしてmimetypedし、ユーザーセッションがない場合は失敗値を出力し、出力値に基づいてJSにエクスペリエンスをガイドさせるPHPエンドポイントを用意することです。

PHP:

//in some accessible url
<?php
if(isset($_SESSION['some_var'])){
  $data = array('flag'=>1,'obj'=>$_SESSION['some_var']);
}else{
  $data = array('flag'=>0);
}
header('Content-type:application/json');
echo json_encode($data);

次に、指定された例のようにページの読み込み時にこれをajaxして、リダイレクトのフラグ値を確認できます。

認証されたページ全体に普遍的に複製する必要があるため、通常、問題に対する1つの普遍的なアプローチを念頭に置いてこれらの種類のものを設計する必要があります。本当にクライアント側で認証をチェックする必要がありますか、それともサーバー側のコードで認証のフォークを操作することができますか(おそらくjavascript / templateファイルを選択的に含めることによって)。あなたの目的に普遍的に適用できるものを考えるのが最善です。 。

于 2012-06-19T14:51:07.987 に答える