我为单页应用创建了登录页面。到目前为止,我有Ajax调用,将检查是否存在用户名并检查其密码。如果用户在AJAX调用返回后通过所有安全步骤并且成功,我将它们重定向到主页面。此页面应包含我的SPA的所有元素。我希望防止的一些事情是前进/后退或点击浏览器中的重新加载按钮。到目前为止,如果他们登录并且系统将他们重定向到主页面,他们可以使用这些按钮并仍然会保持登录状态。在我看来,这可能会导致一些问题,并可能存在安全风险。此外,我在主页面的顶部有一些安全步骤,我正在使用ColdFusion来检查用户是否已登录。这是我到目前为止的例子:
处理登录的JQuery:
$('#ha_login').on('submit', function(e){
e.preventDefault();
var frmUN = $.trim($('#username').val()),
frmPW = $('#password').val();
$.ajax({
type: 'POST',
url: 'Authentication.cfc?method=checkLogin',
data: {'username':frmUN,'password':frmPW},
dataType: 'json'
}).done(function(obj){
if(obj.STATUS == "200"){
location.href = 'Application/MainPage.cfm';
}else{
location.reload(true);
}
}).fail(function(jqXHR, textStatus, errorThrown){
alert("Error: "+errorThrown);
});
});
Authentication.cfc:
<cffunction name="checkLogin" access="remote" output="false" returnformat="JSON">
<cfset fnResults = structNew()>
<cfquery name="checkUser" datasource="#Application.dsn#">
SELECT UserName, Password
FROM Users
WHERE UserName = <cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(FORM.username)#" maxlength="50">
AND Active = 1
</cfquery>
<cfset storedPW = checkUser.Password>
<cfset enteredPW = FORM.password>
<cfif checkUser.recordCount NEQ '1' OR enteredPW NEQ storedPW>
<cfset fnResults.status = "400">
<cfset fnResults.message = "<strong>Error!</strong> Invalid Username or Password!">
<cfelse>
<cfset SESSION.loggedin = true>
<cfset fnResults.status = "200">
</cfif>
<cfreturn fnResults>
</cffunction>
这是我最后的Main.cfm页面:
<cfif !structKeyExists(SESSION, "loggedin") OR SESSION.loggedin EQ false>
<cflocation url="Login.cfm" addToken="false">
</cfif>
<h3>Welcome to My Application.</h3>
我想知道在Main.cfm的安全步骤中是否还有其他内容?还有一种方法可以防止/检测用户何时尝试离开Main.cfm?如果他们这样做,我会注销该用户并将其重定向到登录页面。如果有人可以提供帮助或有一些有用的例子,请告诉我。提前谢谢!
答案 0 :(得分:0)
尝试onbeforeunload事件:在卸载页面之前触发它。它还允许您回询用户是否真的要离开。请参阅演示onbeforeunload Demo。
或者,您可以在他离开时发出Ajax请求。