当前位置: 首页 > news >正文

Web保存状态的手段(Session的使用)

一,JSP中的page指令

1. <%@ page language=“java” session=“true”%>

  •  session:此页面是否使用session,默认值为true

二,使用Session完善之前的登录程序

1. 如何禁止直接输入URL地址进入登录功能的欢迎界面?

首先,我们需要创建一个登录Servlet,用于处理用户的登录请求,并在用户成功登录后设置Session:

​
package com.haina.web;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;@WebServlet("/check")
public class CheckServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String u = req.getParameter("userName");String s = req.getParameter("password");String auto=req.getParameter("autoLogin");Map<String,String>map=new HashMap<>();map.put("admin","123");map.put("test","456");map.put("abc","xyz");//通过用户名,去map中查找密码,如果用户名存在,则可以找到,否则为空String x=map.get(u);//Set<String> k=map.keySet();if (x!=null&&x.equals(s)/*k.contains(u) && map.get(k).equals(s)*/) {//auto!=null表示勾选了自动登录if (auto!=null){//我们使用login作为cookie的键,用这个cookie来实现自动登录Cookie c=new Cookie("login",u);c.setMaxAge(60);resp.addCookie(c);}//从请求对象获取session对象HttpSession session = req.getSession();//把当前登录的用户名存放在session,key是abcsession.setAttribute("abc",u);//如果要实现退出登录功能,可以使用removeAttribute,删除登陆时存放的session数量//session.removeAttribute();//跳转到成功页面//只有第一个参数前面有问号,后续的都是&符号// eg:?name=&age=20&gender=trueresp.sendRedirect("welcome.jsp?name="+u);}/*else if("test".equals(u)&&"456".equals(s)){resp.sendRedirect("welcome.jsp?name="+u);}else if ("abc".equals(u)&&"xyz".equals(s)){resp.sendRedirect("welcome.jsp?name="+u);}*/else {//跳回到登陆页面resp.sendRedirect("login2.jsp");}}
}​

然后,在需要保护的页面(例如welcome.jsp)中,我们在页面顶部添加以下代码,以检查用户是否已经登录:

<%--Created by IntelliJ IDEA.User: ***Date: 2024/7/18Time: 17:03To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>欢迎页面</title>
</head>
<body><%Object o=session.getAttribute("abc");if (o==null){//未登录禁止访问登陆页面,直接跳转回登陆页面response.sendRedirect("login2.jsp");}
%>
<h1>登陆成功,欢迎:<%=request.getParameter("name")%>
</h1></body>
</html>

在这个例子中,我们首先获取当前的Session对象(如果用户没有登录,则Session对象为null)。然后,我们检查Session对象中是否存在名为“username”的属性。如果不存在,我们将用户重定向到登录页面。

2.Login流程图

3.Check流程图

三,Session

1. session:保存在服务器端的内存中,以“key-value”对的形式保存数据,与客户端相关。


2. 客户端支持Cookie

  •  在服务器端创建session,把SessionID保存在客户端内存中

3. 接口HttpServletRequest中处理session的方法:

  •  HttpSession getSession(boolean isNew)
  •          如果session已经存在,则返回一个HttpSession对象,如果不存在并且isNew为true,则会新建一个HttpSession对象
     

4. HttpSession接口的常用方法

  •  void setAttribute(String name,Object value)
  •          绑定一个session的对象
  •  Object getAttribute(String name)
  •         返回session,如果没有返回null
  •  long getCreateTime()
  •         返回session的创建时间
  •  String getId()
  •         返回session的id
  •  void invalidate()
  •         销毁当前session
  •  void removeAttribute(String name)
  •         销毁指定的session内容

http://www.lryc.cn/news/469580.html

相关文章:

  • 第五十四章 安全元素的详细信息 - DerivedKeyToken 详情
  • kafka 的高可用机制是什么?
  • 4.1.3 网站通信技术
  • Java-图书管理系统
  • python如何通过json以及pickle读写保存数据
  • 【SPIE出版,EI检索稳定】2024年人机交互与虚拟现实国际会议(HCIVR 2024,11月15-17日)
  • Linux vim编辑器
  • 普推知产:申请商标名称从4字改成3字下了初审!
  • Flink 状态精准一次性特性
  • 算法笔记day08
  • 在Selenium中有哪些元素对象操作方法?( ̄﹃ ̄)
  • sqli-labs靶场安装以及刷题记录-docker
  • 谷歌仓库管理工具repo
  • C#的自定义Tip窗体 - 开源研究系列文章
  • 目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件
  • 软考:CORBA架构
  • qt QSaveFile详解
  • 【Linux】线程池详解及其基本架构与单例模式实现
  • 运输层知识点汇总3
  • 浔川社团官方联合会提前入驻
  • 比例数据可视化(Python实现板块层级图绘制)——Instacart Market Basket Analysis
  • C++研发笔记8——C语言程序设计初阶学习笔记6
  • 0softmax和背后的最大熵(极大似然法)
  • 6,000 个网站上的假 WordPress 插件提示用户安装恶意软件
  • 最新Compose环境版本
  • 流媒体协议.之(RTP,RTCP,RTSP,RTMP,HTTP)(一)
  • 【智能大数据分析 | 实验四】Spark实验:Spark Streaming
  • es实现自动补全
  • 【日志】Unity3D模型导入基本问题以及浅谈游戏框架
  • 1.8K Star,简洁易用 Web 端创意画板