1

私は 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']; 

}
4

5 に答える 5

2

AJAX 投稿を実行し、セッション変数を投稿を受信するページのセッションに設定すると、セッションに保存されます (同じセッションです)。AJAX コールバックで、ユーザーをホームページに転送します。

もちろん、ログイン資格情報が正しくないというシナリオを考慮する必要があります。

于 2012-09-04T05:50:34.297 に答える
1

秘訣は、JavaScript がセッションについてまったく知る必要がないことです。それぞれの ini 設定HttpOnlyを使用して、セッション管理に Cookieを使用するように PHP を構成できます。

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 を送信して、ユーザーがログインしているかどうかを判断できるようにします。

于 2012-09-04T06:20:49.653 に答える
0

答えを改善する

For Jquery、以下の関数を使用

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;    
}
于 2012-09-04T05:59:05.950 に答える
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);
    });})

データが戻ってきたら、sessionID を使用して、homepage.php に移動します。

PHPスクリプトでこれを行います:

if(isset($_GET['logged'])){
  start_session();
  $_Session['LOGGED']='true';
}
于 2012-09-04T06:15:06.530 に答える
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.
       }
}); 

この回答が必要な場合は、お気軽にお問い合わせください。

于 2012-09-04T07:12:01.597 に答える