如何通过ajax PhoneGap注销

时间:2014-03-28 14:32:33

标签: javascript php jquery ajax cordova

我正在使用 Phonegap 开展 HTML5应用

数据库驻留在我的服务器上。 注册和登录由ajax post完成,我对每个用户有三种不同的访问级别

申请流程 从用户那里获取输入并在服务器端“数据库”验证,然后显示结果,可能是成功或失败或用户类型。

问题: 获得响应后,如何重定向到另一个页面并在页面上保存用户名以及如何注销用户。

这是我的代码

index.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login/register</title>
<script language="JavaScript" type="text/javascript"> 
   function ajax_post(){
  var databox =document.getElementById("status");
      var hr = new XMLHttpRequest();
      var url = "login.php";
      var u = document.getElementById("username").value;
      var p = document.getElementById("password").value;
  var f = document.getElementById("format").value;
      var vars = "username="+u+"&password="+p+"&format="+f;
      hr.open("POST", url, true);
      hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      hr.onreadystatechange = function() {
          if(hr.readyState == 4 && hr.status == 200) {
          var return_data = JSON.parse(hr.responseText);
              if(return_data.Status == "success"){
                 if(return_data.type == "Collecting Data"){
                   //first type of user
                   window.location.href = "a.html";
                 }
                 else{
                    if(return_data.type == "Supervisor"){
                      //second type of user
                    }
                    else{
                    //third type of user
                    }
                 }
            }
            else{
            if(return_data.Status == "fail"){
                databox.innerHTML=" please try again  ";
            }
        }
   }//end if
}//end fuction
hr.send(vars); // Actually execute the request
}//end ajax_post function
</script>
</head>
<body>
<table width="400px">
<tr>
<td colspan="2" style="text-align:center">
<h3>Log in/Register</h3> 
</td>
 </tr>
 <tr>
 <td valign="top">
  <label for="username">Username *</label>
 </td>
 <td valign="top">
 <input id="username" name="username" type="text" maxlength="50" size="25"/>
 </td>
 </tr>
 <tr>
 <td valign="top">
 <label for="password">Password *</label>
 </td>
 <td valign="top">
 <input id="password" name="password" type="password" maxlength="50" size="25"/>
 </td>
 </tr>
 <tr>
 <td colspan="2" style="text-align:center">
 <input id="format" name="format" type="hidden" value="json"/>
 <input name="myBtn" type="submit" value="Login" onClick="javascript:ajax_post();">
 </td> 
 </tr>
 </table>
 <br /><br />
 <div id="status"></div>         
 </body>
  </html>

这是login.php

<?php
 session_start();
 $username = $_POST['username'];
 $password = $_POST['password'];    
 $password = md5($password);
 $format= $_POST['format'];
 mysql_connect("localhost","user","pass") or die (mysql_error());
 mysql_select_db("database name") or die ("no database");  
 $sqlString = mysql_query("SELECT * FROM staff WHERE username = '$username' AND password = '$password'");
 $row = mysql_fetch_array($sqlString); 
 $num_results = mysql_num_rows($sqlString);
 if($num_results ==1){
    $Status='success';
    $type=$row["type"]; 
    $_SESSION['username'] = $username;
    deliver_response($username,$password,$Status,$type,$format);
 }
 else{
    $Status='fail';
    $type="empty";
    deliver_response($username,$password,$Status,$type,$format);
 }

function deliver_response($u,$p,$s,$t,$f){
if($f == 'json') {
     $response['username']=$u;
     $response['password']=$p;
     $response['type']=$t;
     $response['Status']=$s;
 header('Content-type: application/json');
 $json_response=json_encode($response);
     echo $json_response;
}//end if
    else{
     echo 'format not valid';
    }//end else  
}//end function
?>

当我回复响应并重定向到另一个html页面并转到php文件时抛出ajax 并在php中使用此语句

echo $_SESSION['username']; 

它将打印为空。

2 个答案:

答案 0 :(得分:1)

使用它来获得回复:How do I return the response from an asynchronous call?

要获取名称,只需将其保存为$ _SESSION变量或cookie。然后通过做这样的事情(在标题中打印)在页面上获取它。

<!DOCTYPE html>
<html>
<head>
<?php
$name = $_SESSION['name'];
echo "<title>".$name."</title>";
?>
</head>

另外,发布一些代码向我们展示您已尝试过的内容。

答案 1 :(得分:0)

基本上你需要在后端系统上保持会话,Ajax请求登录将检查后端系统的成功认证。我建议您为基于Ajax的登录实现以下序列。

登录程序

  1. 使用Ajax将身份验证请求发送到后端(请参阅示例);
  2. 后端系统将根据Ajax请求对用户进行身份验证。
  3. 如果成功,系统将建立具有访问期限的会话。
  4. 系统将向客户端返回JSON响应,其结果值为true。
  5. 一旦客户端收到回复,将检查正值,如果确定,则重定向到主页或任何页面。
  6. 服务器可以选择提供会话ID以存储为cookie,以便在客户端进行会话验证。
  7. 退出程序

    1. 使用Ajax将注销请求发送到后端。
    2. 后端系统将删除当前会话并回复客户端以获得正值。
    3. 一旦客户端接收响应将检查值,如果确定,则重定向到登录页面。
    4. 如果设置了cookie,则客户端可以删除具有会话值的cookie。
    5. $.getJSON('user/login',{user:'user',password:'password'},function(response){
         if(response.result){
            location.href = '/home';
         }
      });
      

      请注意,建议的流程非常基础,可以进一步改进以便更好地控制。