Java jsp中的会话验证
仅当会话已创建时,短版本才会显示主页 细节 我有一个Java jsp中的会话验证,java,jsp,session,servlets,Java,Jsp,Session,Servlets,仅当会话已创建时,短版本才会显示主页 细节 我有一个login.html。它链接到validation.jsp。它检查密码,然后重定向到下一页 但我希望仅当 验证是正确的。否则,如果有人进入该页面的链接 并发现该页面尚未登录,它将提示 这样做吧 它在servlet中运行良好。我在验证页面中创建了一个新会话 并在主页中设置request.getSession(false) 但这在jsp中似乎不起作用。如果我在页面中设置了session=false 指令,则我根本无法访问会话对象。如果我 明确地执行
login.html
。它链接到validation.jsp
。它检查密码,然后重定向到下一页
但我希望仅当
验证是正确的。否则,如果有人进入该页面的链接
并发现该页面尚未登录,它将提示
这样做吧
它在servlet中运行良好。我在验证页面中创建了一个新会话
并在主页中设置request.getSession(false)
但这在jsp中似乎不起作用。如果我在页面中设置了session=false
指令,则我根本无法访问会话对象。如果我
明确地执行我在页面中所做的操作,它仍然不起作用
<%@ page language="java" import="java.io.*"
contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"
import="java.util.*;"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
session=request.getSession(false);
if(session==null)
{
out.println("please login");
}
else
{
out.println("how did it run!!! ??");
out.println(application.getAttribute("one"));
out.println(session.isNew());
out.println(session.getId());
out.println("<form action='logout.jsp' method='post'>");
out.println("<input type='submit'>");
out.println("</form>");
}
%>
</body>
</html>
在此处插入标题
AJSP
默认情况下创建会话。如果您不需要会话,请使用以下命令
<%@ page session="false" %>
您不能使用if(session==null)
来确定是否有人登录。会话通常是自动创建的,此外,您可能希望在登录之前就使用会话进行某些操作。您可以检查特定的会话属性
String userid = (String)session.getAttribute("userid");
if(userid!=null)
{
out.print("logged in as:" + userid);
}
当然,您必须在登录代码中设置它:
session.setAttribute("userid", userid);
在JSP中也不需要调用request.getSession
。在servlet中,您需要这样做,但在JSP中,session
对象已经为您填充了request.getSession
编辑:
执行session=false指令时,不会声明session对象,因此您不仅需要设置它,还需要实际声明它:HttpSession session=request.getSession(false)
然后您将获得session=null,但是依赖它来保证安全性是危险的,因为进入一个您没有设置session=false的页面将创建会话,并且您的代码将认为有人已有效登录,而他们没有。即使你确信你把session=false放在了所有地方,你可能会错过一个点,或者更可能的是,在你之后的下一个开发人员不会理解你是这样做的,一场安全灾难正在等待发生
使用session=false旨在提高性能,而不是安全性。例如,您有一个不关心会话的faq页面,设置session=false,这样访问该链接的人就不会创建会话并浪费内存。最好不要检查会话的存在,而是检查存在的特定属性(例如用户令牌)。这样你就有了更多的控制权。哦..比如通过会话设置属性,然后在主页上检查它?比如在用户登录时设置属性(注销时删除),然后在主页上检查它。顺便说一句,有很多框架(shiro,spring security)可以帮你做到这一点。似乎是可行的。不过,一旦我完成了jspthanks,springs hibernate就会跟进。晚饭后会试试这个。是的。我已经用sessionAttributes完成了。。评论中的那个家伙帮了我的忙..我能得到的是session=false…这不是意味着getSession(false)!!1应该是的,但你有没有把它放在每一页上?如果没有,则会话已由早期页面创建。我在servlets期间创建了wat。在验证期间创建了一次会话。然后在每个页面上禁用了通过getSession创建新会话的选项(false)…这样,只有通过验证并创建了会话时,您才能查看页面。但是,如果我将session设置为false,然后会话对象变得不可用。。在月食中,我在它下面有一条红线…所以我不能在上面检查任何东西!