以下是一段用于模拟登录和注销操作的代码。 (只是模拟 - 登录有一个单独的功能,它使变量login
的值为真。如果我点击主页按钮,警告框会按预期显示真值。接下来如果我点击contact
调用函数loginCheck
警告框显示未定义的值。是否可以将值保持为true
本身?
<script type="text/javascript">
var login;
function logout()
{
login = false;
}
function loginCheck() {
alert(login)
if (!login)
{
alert("Log In to continue operations");
return false;
}
}
function loginAction()
{
login = true;
alert(login);
}
<script>
html代码是:
<li><a href="HomePage.html" onclick="loginAction();">Home</a></li>
<li><a href="#" >Register</a></li>
<li><a href="#" onclick="return loginCheck();">services</a></li>
<li><a href="contact.aspx" onclick=" return loginCheck();"> Contact</a></li>
<li><a href="HomePage.html" onclick="return logout();">Log Out</a></li>
答案 0 :(得分:2)
JavaScript不会跨页面重新加载维护状态。你需要自己做。通常,您可以使用Cookie。
找到一种方法让您的JavaScript布尔值在页面重新加载时保留它的价值是没有价值的,因为该问题的各种解决方案和维护用户授权状态的解决方案更多或者不那么无关。
答案 1 :(得分:1)
您可以使用我在下面编写的Singleton类模式在页面上保持状态。这可以解决您提出的问题。
然而,正如meagar在另一条评论中写道,你不能使用javascript来维护页面加载的状态。身份验证/授权通常在服务器端完成,并使用cookie来维护状态。
<script type="text/javascript">
var auth = new function() {
this.logged = false;
this.login = function () {
this.logged = true;
};
this.logout = function() {
this.logged = false;
};
this.loginCheck = function() {
if (this.logged) {
alert('Logged in!');
} else {
alert('logged out!');
}
};
}
</script>
<li><a href="#" onclick="auth.login();">Login</a></li>
<li><a href="#" onclick="auth.logout();">Logout</a></li>
<li><a href="#" onclick="auth.loginCheck();">Check</a></li>
有关javacript课程的更多信息:http://www.phpied.com/3-ways-to-define-a-javascript-class/
答案 2 :(得分:1)
有多种方法可以使用客户端技术在页面之间保持状态,例如POST / GET参数,Cookie,localStorage
和sessionStorage
。但是,请记住,永远不应依赖客户端代码来强制执行安全性,因为任何人都可以篡改客户端代码,包括您存储在任何这些提及的存储技术中的数据。