登录同一页面,检查SESSION而不重新加载
Login on same page, check SESSION without reload
我目前在网站的每个页面顶部都有一个表单,用户可以输入用户名和密码进行登录。
但是一旦点击按钮,我就使用JQueryAJAX方法将其提交到login.php,而无需刷新页面,在那里它验证凭据并返回用户提交的用户名/密码是有效还是无效。
最后,结果返回到用户尝试登录的页面
我还希望页面在成功登录后,表单消失,取而代之的是"欢迎回来,用户!"
一切都正常,除了我希望在不重新加载页面的情况下实现这一点。以下是我目前所拥有的:-
如果会话未设置,则显示表单,否则显示"欢迎回来",用户:-
<div class="user">
<?php
if (isset($_SESSION['logged_user'])) {
$logged_user = $_SESSION['logged_user'];
print("<p>Welcome back, $logged_user!</p>");
}
else {
print('<div class="forms">
<form id="login">
<label>Username <input type="text" name="username" id="username"></label>
<label>Password <input type="text" name="password" id="password"></label>
<input type="submit" class="submit" value="Login" id="login">
<span class="error"></span>
</form>
</div>');
}
?>
</div>
Javascript/AAJAX处理提交:
$(document).ready(function() {
$("#login").click(function() {
var username = $("#username").val();
var password = $("#password").val();
var dataString = 'username='+username+'&password='+password;
if(username != '' && password != '') {
$.ajax({
type: "POST",
url: "login.php",
data: dataString,
success: function(responseText) {
if(responseText == 0) {
$("error").html("Invalid login.");
}
else if(responseText == 1) {
window.location = 'index.php';
}
else {
alert('Error');
}
}
});
}
return false;
});
我的login.php做得很好。
现在,更新页面以显示"欢迎回来"消息的唯一方法是包含行:window.location = 'index.php';
,以便重新加载页面。但如果没有这个,用户将成功登录,但将无法看到它。
没有AngularJS有办法做到这一点吗?这是一个类,我们不允许使用框架,这很令人沮丧!谢谢
您可以使用动态HTML(DHTML)。
成功函数不重定向,而是使用jquery来更改内容。
类似这样的东西:
success: function(responseText) {
if(responseText == 0) {
alert('Invalid login');
}
else if(responseText == 1) {
// Success
$('#login').parent().append('<p>Welcome back, '+username+'!</p>');
$('#login').remove();
}
else {
alert('Another Invalid login');
}
}
API登录返回:
- 0(如果无效)
- 1如果有效
使用此代码,
<div class="user">
<div class="after_login" style="display:none">
<?php
$logged_user = $_SESSION['logged_user'];
print("<p>Welcome back, $logged_user!</p>");?>
</div>
<div class = "before_login">
print('<div class="forms">
<form id="login">
<label>Username <input type="text" name="username" id="username"></label>
<label>Password <input type="text" name="password" id="password"></label>
<input type="submit" class="submit" value="Login" id="login">
<span class="error"></span>
</form>
</div>');
?>
</div>
</div>
在脚本中这样使用而不是:
window.location = 'index.php';
使用下线,
$('.after_login').show();
$('.before_login').hide();
您必须更改javascript代码中的一些修改,如下所示:
$(document).ready(function() {
$("#login").click(function() {
var username = $("#username").val();
var password = $("#password").val();
var dataString = 'username='+username+'&password='+password;
if(username != '' && password != '') {
$.ajax({
type: "POST",
url: "login.php",
data: dataString,
dataType: "json",
success: function(responseText) {
if(responseText.status == 'invalid') {
$(".error").html("Invalid login.");
}
else if(responseText.status == 'valid') {
$('.after_login').html('Welcome back,'+responseText.username);
$('.after_login').show();
$('.before_login').hide();
}
else {
alert('Error');
}
}
});
}
return false;
});
在上面的例子中,我添加了一行额外的dataType:"json",所以现在你需要从你的login.php中以json格式发送输出,并成功地进行了一些修改。
$response = array();
// $result variable get result from your database
if(count($result) == 0)
{
$response['status'] = 'invalid';
}else{
$response['status'] = 'valid';
$response['username'] = $result['username'];
}
echo json_encode($response);
exit;
所以你的成功变成低于
success: function(responseText) {
if(responseText.status == 'invalid') {
$(".error").html("Invalid login.");
}
else if(responseText.status == 'valid') {
$('.after_login').html('Welcome back,'+responseText.username);
$('.after_login').show();
$('.before_login').hide();
}
else {
alert('Error');
}
在login.php中,将成功条件更改为输出用户名,而不是1。因此responseText将在ajax回调中使用用户名。
删除ajax成功中的最后一个else条件,并在成功条件中执行类似的操作
$('.forms').html('<p>Welcome back, ' + responseText + '!</p>');
PHP:
if (isset($_SESSION['logged_user'])) {
$logged_user = $_SESSION['logged_user'];
//Leave out the print(Welcome...) part, it won't do anything because the page won't be refreshed.
}
else{
exit('1');
}
在Ajax中,不要担心responseText==0,只需使用==1:
success: function(responseText) {
if(responseText == "1") {
alert("Nope");
}
else {
$("#successdiv").html("welcome...");
}
- 创建新数据和加载现有数据需要单独的视图吗
- 钛 - HTTPClient:打开新的控制器加载
- 保持 JavaScript 在浏览器控制台中运行,即使在新的页面加载之后也是如此
- 路由到新页面时加载不起作用
- 如何在新窗口完成加载后执行某些内容
- 使用新标题重新加载 html 页面
- Primefaces在打开新页面时加载数据消息
- Wordpress音频播放器和平滑状态.在新页面重新加载播放器时调用什么回调函数
- 用新数据重新加载renderer3d
- 文本不被渲染后,新的页面加载- JQuery移动
- 需要在新标签中加载pdf/doc文件,而不是下载,只是想在浏览器中阅读
- 用新参数重新加载页面
- Js和CSS不检测新页面何时加载
- 在新页面上加载一个flash视频,它在上一页上的位置
- 在新窗口中加载代码编写器视图
- 在控制台中使用新脚本重新加载页面
- 如何在加载新页面后加载AJAX数据
- 如何使用jQuery在新窗口中加载页面,然后关闭它们
- Jquery没有看到新的HTML加载到对话框中
- 无法用新值重新加载JGrid