phonegap:将数据库值存储在本地存储中
phonegap: store database value in local storage
这是我第一次使用 phonegap 和本地存储。所以,如果我问了一些愚蠢的问题,那么我深表歉意。
我正在尝试为移动应用程序创建一个 login/signup 页面。我在 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;
请指教
我在这里看到的第一个错误是 localStorage
的用法是错误的:
使用window.localStorage.setItem("login",1);
而不是 localStorage.login ="true";
然后使用 window.localStorage.getItem("login");
访问它
但是,在我看来,在 localStorage
中存储会话之类的东西(甚至也不是电子邮件地址)也不是一个好主意,因为任何其他恶意应用程序都可以访问所有 localStorage 值,- 为什么而不是首先在每个页面上执行单个 ajax 请求以检查是否建立了有效会话,如果没有则重定向到登录。在这种情况下,也不需要存储 last_seen
时间,会话和良好的身份验证应该始终在服务器端完成。
我们使用本地存储来存储一些值以供将来使用,它可以根据键覆盖值。以下是存储值 localStorage.setItem("login",1) 的示例;
用于检索登录使用的值
localStorage.getItem("login");
要删除登录密钥,请使用
localStorage.removeItem("login");
谢谢...
这是我第一次使用 phonegap 和本地存储。所以,如果我问了一些愚蠢的问题,那么我深表歉意。
我正在尝试为移动应用程序创建一个 login/signup 页面。我在 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;
请指教
我在这里看到的第一个错误是 localStorage
的用法是错误的:
使用window.localStorage.setItem("login",1);
而不是 localStorage.login ="true";
然后使用 window.localStorage.getItem("login");
但是,在我看来,在 localStorage
中存储会话之类的东西(甚至也不是电子邮件地址)也不是一个好主意,因为任何其他恶意应用程序都可以访问所有 localStorage 值,- 为什么而不是首先在每个页面上执行单个 ajax 请求以检查是否建立了有效会话,如果没有则重定向到登录。在这种情况下,也不需要存储 last_seen
时间,会话和良好的身份验证应该始终在服务器端完成。
我们使用本地存储来存储一些值以供将来使用,它可以根据键覆盖值。以下是存储值 localStorage.setItem("login",1) 的示例; 用于检索登录使用的值 localStorage.getItem("login"); 要删除登录密钥,请使用 localStorage.removeItem("login");
谢谢...