【问题标题】:phonegap: store database value in local storagephonegap:将数据库值存储在本地存储中
【发布时间】:2016-10-16 16:35:34
【问题描述】:

这是我第一次使用 phonegap 和本地存储。所以,如果我问了一些愚蠢的问题,我道歉。

我正在尝试为移动应用创建登录/注册页面。我在 html/js/jquery 中创建了一个前端页面,后端在 php 中。

在 php 中我们使用 session 来存储一些数据,但在 html 中没有 session。但是我知道我们可以使用本地存储来存储这些值。 这是我用于身份验证的 php 代码。

<?php
session_start();
header("Access-Control-Allow-Origin: *");
header('Content-Type: application/json');
require_once('include/db.php');
require_once('functions.php');
$res=array();
$res['errors']=array();
if(isset($_POST)) {
    if(empty($_POST['email'])) {
        array_push($res['errors'], "Email could not be empty");
    }
    if(empty($_POST['password'])) {
        array_push($res['errors'], "Password could not be empty");
    }
    if(!empty($_POST['email']) && !isValidEmail($_POST['email'])) {
        array_push($res['errors'], "Invalid Email Format");
    }

        $email = $_POST['email'];
        $password = $_POST['password'];
        $now = date('Y-m-d H:i:s'); 

    if(empty($res['errors'])) { 
        $result = $mysqli->prepare("SELECT uid,pic,fname,last_seen FROM users where email= ? and password = ? and status = '1'");
        $result ->bind_param("ss", $email, $password);
        $result->execute();
        $result->store_result();

        $result->bind_result($uid, $pic, $fname, $last_seen);
        if($result->num_rows == 1){

             while ($result->fetch()) {
                        $_SESSION['uid'] = $uid;
                        $_SESSION['pic'] = $pic;
                        $_SESSION['name'] = $fname;
                        $_SESSION['last_login'] = $last_seen;
            }

            $res['success'] = true;
        }
        else{
            array_push($res['errors'], 'Invalid login details');
            $res['success'] = false;

        }
    }else{
        $res['success'] = false;        
    }
    session_write_close();
     echo json_encode($res);
}
?>

这里是 ajax 代码。

<script type="text/javascript">
$('document').ready(function()
{
            $("#login").on("submit", function(e) {              
                e.preventDefault;
                var btn = $('#btn-login');
                btn.button('loading');
                $.ajax({
                    type: 'post',
                    url: 'loginexec.php',
                    cache: false,
                    dataType: 'json',
                    data: $('form#login').serialize(),
                    beforeSend: function() { 
                        $("#validation-errors").hide().empty(); 
                    },
                    success: function(data) {
                        if(data.success == false)
                            {
                                var arr = data.errors;
                                $.each(arr, function(index, value)
                                {
                                    if (value.length != 0)
                                    {
                                        $("#validation-errors").append('<div class="alert alert-danger"><strong>'+ value +'</strong><div>');
                                    }
                                });
                                $("#validation-errors").show(); 
                                btn.button('reset');                            
                            } else {
                                localStorage.login="true";
                                localStorage.email=email;
                                localStorage.id=id;

                                 window.location.href = 'user_profile.php';
                            }
                    },
                    error: function(xhr, textStatus, thrownError) {
                        alert('Something went to wrong.Please Try again later...');
                        btn.button('reset');
                    }
                });             
                return false;
            });
        });

    </script>

我想将这些值存储在本地存储中,但不知道该怎么做。

$uid;
$pic;
$fname;
$last_seen;

请指教。

【问题讨论】:

  • 你到底返回了 ajax 什么?是 $uid 的值吗? $图片; $f名称; $last_seen;在那个回报?我看不到您将这些值添加到 $res 数组的位置

标签: php jquery ajax cordova phonegap-plugins


【解决方案1】:

我看到的第一个错误是localStorage 的用法是错误的:

使用window.localStorage.setItem("login",1); 而不是localStorage.login ="true";

然后使用window.localStorage.getItem("login");访问它

但是,在我看来,在 localStorage 中存储诸如会话之类的内容(甚至不是电子邮件地址)也不是一个好主意,因为任何其他恶意应用程序都可以访问所有 localStorage 值,为什么不这样做呢?每个页面上的单个 ajax 请求首先检查是否建立了有效会话,如果没有重定向到登录。在这种情况下,也不需要存储last_seen 时间,会话和良好的身份验证应始终在服务器端完成。

【讨论】:

  • 感谢您的回答。我会牢记这一点。
【解决方案2】:

我们使用本地存储来存储一些值以备将来使用,它可以根据键覆盖值。这是存储值 localStorage.setItem("login",1); 的示例 用于检索登录使用的值 localStorage.getItem("登录"); 要删除登录密钥,请使用 localStorage.removeItem("登录");

谢谢...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 2023-01-27
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    相关资源
    最近更新 更多