登录/注销会话未完全正常工作。 JSP

时间:2015-03-02 17:17:00

标签: html mysql jsp jstl

我想要做的是让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>

2 个答案:

答案 0 :(得分:0)

它非常令人困惑,但我建议你不要使session.isNew无效(使用session.isNew只识别新的浏览器会话或第一次访问)但是,在成功登录时将一些变量放在会话中并编写代码基于此会话变量。

希望它有所帮助。

答案 1 :(得分:0)

首先,您应该考虑使用Java EE安全性,然后服务器将负责保护您的页面,并且您将能够通过request.getRemoteUser()访问已记录的用户ID。

如果您更喜欢自己的本地安全性,那么您应该测试,如果用户是根据存储在会话中的属性登录的,那么在您的情况下,它可能是session.getAttribute(usernameID)并且记得在注销时使会话无效。