我想要做的是让JSP检查用户是否登录。到目前为止,我的代码仅检查用户是否访问过该网站。
因此,即使用户尚未登录但已访问过该页面,JSP仍会认为该用户已登录。来自主页的代码:
<div style="position: absolute; top: 0; right: 0; width: 1000px; text-align:right;">
<% if( session.isNew() ){%>
<a href="loginpage.jsp">Login<</a>
<%} else { %>
<a href="logout.jsp">Logout</a>
<% } %>
</div>
来自实际登录页面的代码:
<!This part is for Username>
<script type="text/javascript">
function AllowAlphabet(){
if (!userform.username.value.match(/^[0123456789]+$/) && userform.username.value !="")
{
userform.username.value="";
userform.username.focus();
alert("Please enter only numerials for the Customer number.");
}
}
</script>
<%
if ( session.isNew() )
{out.println("<h3>Welcome new user</h3>" );}
else
{
session.invalidate();
%>
<jsp:forward page="customerlogin.jsp" />
<%
}
%>
<%
if ( request.getParameter("username" ) == null )
{out.println("<h3>Please login:</h3>" );}
else
{
pageContext.setAttribute("customerNumberString",request.getParameter( "username" ) );
pageContext.setAttribute("customerPasswordString",request.getParameter( "password" ) );%>
<sql:query var="result">
select * from Customer where
customer_number =
"${customerNumberString}" and
passwd =
MD5(
"${customerPasswordString}" );
</sql:query>
<c:set var = "numResults"
scope = "page"
value = "${result.rowCount}"/>
<%
Object o =
pageContext.getAttribute("numResults" );
Integer obj = new Integer( 1 );
int i = obj.intValue();
if ( pageContext.getAttribute("numResults" ).equals( obj ) )
{
String usernameID = new String( "username" );
String usernameVAL =
new String( request.getParameter("username" ) );
session.setAttribute(usernameID, usernameVAL );
%>
<jsp:forward page="redirectpage.jsp" /> <%
}
else
{out.println("again " );}
}
%>
<form action="customerlogin.jsp"
name="userform"
onsubmit="return AllowAlphabet()"
method="POST">
Customer Number:
<input type="text" name="username" onkeyup="AllowAlphabet()">
<script type="text/javascript">document.onload = ctck();</script>
<br />
Password:
<input type="password" name="password" />
<br />
<input type="submit" value="Login" />
</form>
</body>
答案 0 :(得分:0)
它非常令人困惑,但我建议你不要使session.isNew无效(使用session.isNew只识别新的浏览器会话或第一次访问)但是,在成功登录时将一些变量放在会话中并编写代码基于此会话变量。
希望它有所帮助。
答案 1 :(得分:0)
首先,您应该考虑使用Java EE安全性,然后服务器将负责保护您的页面,并且您将能够通过request.getRemoteUser()
访问已记录的用户ID。
如果您更喜欢自己的本地安全性,那么您应该测试,如果用户是根据存储在会话中的属性登录的,那么在您的情况下,它可能是session.getAttribute(usernameID)
并且记得在注销时使会话无效。