Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jsp中的会话验证_Java_Jsp_Session_Servlets - Fatal编程技术网

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>

在此处插入标题

A
JSP
默认情况下创建会话。如果您不需要会话,请使用以下命令

<%@ 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,然后会话对象变得不可用。。在月食中,我在它下面有一条红线…所以我不能在上面检查任何东西!