单击注销按钮后终止会话并重定向到登录页面

2024-02-06

我在JSP中有以下代码:

<%
    if(session.getAttribute("Username") == null || session.getAttribute("Username") == "_INVALID_")
    {
        response.sendRedirect("LoginPage.html");
    }
%>

<form>
    <input type="button" value="Change Account Details" onClick="location.href='ChangeDetails.jsp'">
    <br></br>
    <input type="button" value="Add Customers" onClick="location.href='AddCustomers.jsp'">
    <br></br>
    <input type="button" value="Manage Flights" onClick="location.href='ManageFlights.jsp'">
    <br></br>
    <input type="button" value="Book Flights" onClick="location.href='BookFlights.jsp'">
    <br></br>
    <input type="button" value="Log Out" onClick="location.href='LoginPage.html'">
</form>

当用户单击注销按钮时,我想将他重定向到登录页面并终止当前会话。我已经成功完成了重定向部分,但我不知道如何终止会话。请问这怎么办?


为了终止当前会话,您基本上需要调用HttpSession#invalidate() http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSession.html#invalidate%28%29并执行重定向到登录或主页。这段代码应该放在doPost()的方法servlet https://stackoverflow.com/tags/servlets/info它由 POST 请求调用。

E.g.

<form action="${pageContext.request.contextPath}/logout" method="post">
    <input type="submit" value="Logout" />
</form>

with

@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getSession().invalidate();
        response.sendRedirect(request.getContextPath() + "/LoginPage.html");
    }

}

无关对于具体问题,您的用户名检查代码不在正确的位置。您不应该在每个 JSP 页面上复制粘贴相同的代码。您应该在一个地方执行这项工作小服务程序过滤器 https://stackoverflow.com/tags/servlet-filters/info。 JSP 文件中的 Java 代码应该是avoided https://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files越多越好。

此外,当最终用户使用浏览器的后退按钮返回历史记录时,还存在另一个潜在问题。默认情况下,浏览器将缓存所有响应,因此后退按钮可能会显示浏览器缓存中的页面,而不是直接从服务器请求全新的页面。为了解决这个问题,请参阅此相关问题防止用户在注销后看到以前访问过的安全页面 https://stackoverflow.com/questions/4194207/prevent-user-from-going-back-to-the-previous-secured-page-after-logout

最后但并非最不重要的一点是,您遇到了一些非常奇怪的 HTML。按钮与onClick导航?用户和SEO多么不友好。使用正常<a>链接代替。对于按钮的外观,添加一些 CSS。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单击注销按钮后终止会话并重定向到登录页面 的相关文章

随机推荐

  • 无法停止使用 ExecutorService 启动的任务

    抱歉 我必须打开一个新线程来描述这个问题 今天早上我问这个问题 https stackoverflow com questions 8632773 how to stop immediately a task which is starte
  • Flutter BLoC 测试失败

    目前正在尝试对我的肘节实施单元测试 我感觉严重缺乏 BLoC 在线测试文档或有用的示例 谁能解释一下我在设置这个测试时做错了什么 我似乎无法弄清楚问题是什么 如果有人能告诉我我能做些什么来解决这个问题 我将不胜感激 设置状态文件 class
  • Android DownloadManager 保存到 Download 文件夹

    我正在使用 DownloadManager 来下载文件 我想将下载内容放在标准下载文件夹中 以便人们可以使用文件管理器在最明显的位置轻松找到它们 Uri downloadLocation Uri fromFile new File Envi
  • 如何实现中值堆

    与最大堆和最小堆一样 我想实现中值堆来跟踪给定整数集的中值 API应具有以下三个功能 insert int should take O logN int median will be the topmost element of the h
  • Angular2 路由。请求的路径在索引 1 处包含未定义的段

    我在 Angular 2 中遇到路由问题 我从操作调用 router navigate 到数据表 罕见的是 有时当我单击调用该行的按钮时 它可以正常工作 有时却不能 this router navigate edit id relative
  • 在selenium问题中打开chrome

    我目前正在参加我的第一个自动化测试课程 讲师让我们在加载 Selenium 后在 Eclipse 中创建一个程序 并在程序中创建一个步骤来查看可执行文件以启动 chrome 然后指定一个网站进行检查 看起来我陷入了循环 这是程序 java程
  • 使用 r 删除希伯来语“niqqud”

    一直在努力去除niqqud https en wikipedia org wiki Niqqud 用于表示元音或区分希伯来字母表字母的替代发音的变音符号 例如我有这个变量 样本1 我找不到有效的方法来删除字母下面的标志 尝试过纵梁 与str
  • 从 Web 开发学习 Objective C (Cocoa) 进行 iPhone 编程?

    我想学习开发 iPhone 应用程序 我在 HTML CSS 和 PHP 方面拥有丰富的经验 我也了解一些 JavaScript 我应该从哪里开始 我已经下载了带有 XCode 的 SDK 等等 我是不是有点超前了 我真的不知道 有教程或者
  • 谷歌应用脚​​本,团队驱动的谷歌选择器

    221 5000 你好 目前我正在尝试为谷歌团队驱动器实现谷歌pikker 此代码适用于我的 Google 云端硬盘 但如果您将此代码用于 Google Team Drives 请添加参数 enableFeature google pick
  • 将字符串拆分为行 Oracle SQL

    在搜索论坛后 我想出了以下内容 但它不起作用 我有一张桌子 上面有以下内容 ID Strings 123 abc fgh dwd 243 dfs dfd dfg 353 dfs 424 dfd dfw 523 请注意 大约有 20 000
  • 如何对顺序逻辑进行单元测试?

    假设我有具有以下方法的 Car 类 装载汽油 I燃油气 InsertKey IKey键 启动引擎 IDriverSession Go Car 的目的是配置并返回 IDriverSession 应用程序的其余部分使用该 IDrivingSes
  • 在我的主机上运行 python 脚本

    我是 Web 开发和 Python 的新手 由于我没有足够的词汇来提出确切的问题 这里总结了需要做什么 我有一个小的测试 python cgi 脚本 我已将其上传到 home username pyscripts 位于上面 home 用户名
  • Java 7 中的 emma 和 junit 导致 java.lang.VerifyError 和非法局部变量错误

    所以我收到这些错误 junit 方法 test nz ac massey cs sdc log4jassignment s06005586 AppenderLayoutTest V 中非法局部变量表长度 17 junit java lang
  • JSON.parse() 是如何工作的?

    我没有在 javascript 上做太多工作 而且 我需要解析一个 JSON 字符串 所以 我想知道 JSON parse 到底做了什么 例如 如果我将 json 字符串分配给这样的变量 var ab name abcd details a
  • (为什么)移动构造函数或移动赋值运算符应该清除其参数?

    我正在学习的 C 课程中的移动构造函数实现示例看起来有点像这样 Move constructor Motorcycle Motorcycle Motorcycle ori m wheels std move ori m wheels m s
  • React Native 中的 PhaseScriptExecution [CP-User] 错误

    现在每次我创建一个新项目react native init ProjectName创建后我做npx pod install进而react native run ios它给了我错误 我创建的每个新项目都会发生这种情况 我不确定是否需要进行更新
  • 长赋值和双赋值不是原子的 - 这有什么关系?

    我们知道 long 和 double 赋值在 Java 中不是原子的 除非它们被声明为 volatile 我的问题是它在我们的编程实践中到底有多重要 例如 如果您看到下面的类 其对象在多个线程之间共享 The below class is
  • Facebook向多个朋友“发送”对话

    这个想法是 用户可以请求几个朋友对他们所做的事情提供反馈 我有一个朋友选择器 效果很好 从这里我得到用户 ID 然后我调用发送对话框 结果有多个收件人 而只有一个 有谁知道为什么 FB ui method send name Test to
  • Blazor WebAssembly:同一组件渲染上的多个路由

    我实际上正在试验 Blazor WebAssembly 除了一件事之外 一切都很好 我的想法是我想共享相同的组件来创建或编辑项目 组件的名称是 CreateOrEdit razor 我有两条路线 page master maker crea
  • 单击注销按钮后终止会话并重定向到登录页面

    我在JSP中有以下代码