【问题标题】:How to use session variables on JSP safely in strut如何在strut中安全地使用JSP上的会话变量
【发布时间】:2012-02-06 14:19:37
【问题描述】:

我正在使用< bean:write /> 成功地从会话中打印JSP 上的一些值。但是在提交页面后,如果我回来(会话到期后)并刷新页面,它会在页面上打印完整的轨迹跟踪;

< session attribute name> not found in session scope.

为了避免这种情况,我做了两件事。但没有什么对我有用。

  1. 我把&lt; bean:write /&gt;包裹在&lt; logic:empty /&gt;里面
  2. 在页面的开头,我刚刚检查了&lt; session attribute name&gt; 的值是否为空。如果是这样,我会将其重定向到错误页面。

如果我在请求而不是会话中添加属性,我将面临同样的问题。

< request attribute name> not found in request scope.

来自 JSP 的用于检查会话的代码

HttpSession sess = request.getSession(false); 
if (sess == null) {response.sendRedirect("errorpg.jsp");} 
else{
    String sessionId_Logon = (String) sess.getAttribute("attrName");
    if(sessionId_Logon == null)
    {
            response.sendRedirect("errorpg.jsp");
    }
}

我知道“else”块意义不大。我一个人也试过了。

【问题讨论】:

    标签: jsp session struts


    【解决方案1】:

    我更倾向于在页面上检查会话是否有效,然后通知用户它是否已过期。请参阅 this threadthis one 之类的内容,了解如何操作。

    【讨论】:

    • 似乎您正在检查会话属性,而不是首先检查会话是否有效。至少我是这样解释你问题中的第 2 点的。你能说明你是如何检查会话是否过期的吗?
    • 如果会话属性在初始会话到期后不再存在于会话中,那么很有可能初始化 attrName 的页面在新会话创建后没有被访问过。另外,您是否只在应用程序的某个点分配新的会话 ID?可能是某个过滤器或包含的 jsp 或某些东西在未检测到一个新会话时分配了一个新会话,因此您的 request.getSession(false) 将始终返回一个有效会话。在不知道你的应用的情况下,我现在只是猜测。
    • 只有一个地方我使用 request.getSession() 创建会话。然后转发到提到的JSP。如果会话过期并且 cpntrol 再次来到这个 JSP, 在任何检查之前都会查看会话属性。所以错误来了
    【解决方案2】:

    好吧!我发现了我猜的问题。 &lt; bean:write /&gt; 比其他任何东西都更早被编译。所以我对会话的外部检查意义不大。

    现在我有 2 个解决方案;

    1. 要么我不使用&lt; bean:write /&gt;。相反,我可以使用 scriptlet
    2. 或者我可以在层次结构中的某个页面上方检查会话有效性 像一些母版页。

    我正在使用第二个。

    【讨论】:

      【解决方案3】:

      也许这可以帮助你.... 它对我很好..

      <logic:empty name="employee" scope="session"> <jsp:forward page="LoginScreen.do"/> </logic:empty>

      欢迎先生&lt;bean:write name="employee" scope="session"/ &gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-13
        • 1970-01-01
        • 2011-02-15
        • 2015-01-26
        • 2010-12-02
        • 1970-01-01
        • 1970-01-01
        • 2017-07-13
        相关资源
        最近更新 更多