JavaWeb会话管理

会话和会话状态

会话是一个客户端浏览器与WEB服务器之间连续发生的一系列请求和响应过程。

会话状态是指WEB服务器与浏览器在会话过程中的状态信息,借助会话状态,WEB服务器能够把属于同一会话中的一系列的请求过程关联起来。WEB服务器端程序要能从大量的请求消息中区分哪些请求消息属于同一个会话,即能识别出来同一个浏览器的访问请求,者需要浏览器对其发出的每个请求消息都进行标识;属于同一会话中的请求消息都附带同样的标识号,而属于不同会话的请求消息总是附带不同的标识号,这个标识号就称为会话ID(SessionID)。

HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求时一种浏览器发出的,浏览器的每一次请求都是完全孤立的。所以Web服务器,必须能够采用一种机制来唯一地标识一个用户,同时记录该用户的状态。Web服务器通常通过两种方式完成会话跟踪:

  • Cookie

    Cookie机制在浏览器中直接保存会话信息。服务器响应客户端时,在响应头部里带有set-cookie字段将会话信息发送给浏览器,客户端在后面的请求都将在头部中添加cookie字段,将会话信息放入其中。

    Cookie的作用范围默认可以作用当前目录和当前目录的子目录,但不能作用与当前目录的上一级。可以手动制定Cookie的作用范围。

    Cookie分为会话Cookie(Session Cookie)和持久化Cookie(Persistent Cookie):会话Cookie只存在于浏览器的内存中,浏览器关闭后Cookie将不进行保存;持久化Cookie保存在硬盘上,在浏览器关闭后Cookie仍然存在,下次访问能继续使用。

  • Session

    Session机制基于Cookie实现,采用的是在服务器端保持HTTP状态信息的方案。服务器采用一种类似与散列表的结构来保存Session上的数据,并通过Cookie将散列表的哈希值交由客户端保存。客户端在会话过程中,只需保存和发送哈希值。

    Session机制:当程序需要为某个客户端的请求创建一个Session时,服务器首先检查这个客户端的Session标识(即SessionID),如果已经包含一个SessionID,则说明以前已经为此客户创建过Session,服务器就按照这个SessionIDSession检索出来(如果检索不到,就可能会创建一个,这种情况可能出现在服务端已经删除了该用户对应的Session对象,但用户可以人为的在URL后面加上一个JSESSIOIN的参数)。如果客户请求不包含SessionID则为此客户创建一个Session并且生产一个与此Session关联的SessionID,这个SessionID在本次响应中返回给客户端保存。若浏览器禁用了Cookie,浏览器可以通过URL重写的方式传递Session

    保存sessionid

    1. 使用cookie,在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器

      浏览器保存SessionID一般是采用会话Cookie的方式。但如果手动的写入一个JSESSIONIDCookie,将保存在持久化Cookie中。

    2. 使用URL重写,把SessionID放在URL路径后面。在整个交互过程中,需要重写每一次的URL。附加的方式有两种

      • 作为URL路径的附加信息
      • 作为查询字符串

JavaWeb中的Cookie

  1. 创建Cookie对象

    Cookie cookie = new Cookie("name","value");
  2. 获取Cookie的值和名称

    cookie.getName();
    cookie.getValue();
  3. 调用response的一个方法把Cookie传给客户端

    response.addCookie(cookie);
  4. 获取所有Cookie

    Cookie[] cookies = request.getCookies();
  5. 设置Cookie过期时间

    //以秒为单位。
    //若为0,则立即删除该cookie;
    //若为负数,表示不存储该cookie(会话Cookie)
    //若为正数,则表示该cookie的存储时间(持久化Cookie)
    cookie.setMaxAge(30); 
  6. 设置Cookie作用范围

    cookie.setPath(path);

JavaWeb中的Session

JSP中获取Session对象

JSP页面中有个内置的session对象,可以直接使用。若当前的JSP页面或Servlet是客户端访问的当前WEB应用的第一个资源,且JSP的page指定的session属性值不为false,则服务器就会为创建一个HttpSession对象。若当前JSP页面不是客户端访问的当前web应用的第一个资源,且其他页面已经创建过Session对象,则当前JSP页面的session为前面回话的HttpSession对象。

Servlet中获取Session对象

Servlet中可以通过调用request对象的getSession对象来获取Session对象。

// create为false:有与当前jsp对象关联的httpsession对象,则返回该对象;若没有和当前JSP对象关联的httpsession对象,则返回null
// create为true:一定返回一个HttpSession对象,若有与当前jsp对象关联的httpsession对象,则返回该对象;若没有,则创建一个httpsession对象,并返回该对象
request.getSession(boolean create); 
销毁Session对象

销毁Session对象可以通过三种方式:

  1. 调用Session对象的invalidate方法

    session.invalidate();
  2. 服务器卸载当前Web应用

  3. 超出Session过期时间(默认30分钟)

    通过session对象设置过期时间

    session.setMaxInactiveInterval(5);//单位为秒

    web.xml中设置过期时间

    tomcat下config/web.xml
    <!--在web.xml中设置过期时间-->
    <!--在web.xml中设置过期时间-->
    <session-config>
       <session-timeout>5</session-timeout>
    </session-config>
  4. 并不是关闭浏览器就销毁HttpSession对象。例如通过持久化Cookie或者URL重写

Session对象常用方法
方法描述
getId()获取SessionID
setAttribute()设置属性
getAttribute()获取属性
removeAttribute()移除属性
getAllAttributeNames()获取所有的属性名
getMaxInactiveInterval()获取最长到期时间
setMaxInactiveInterval()设置最长到期事件
invalidate()使该Session对象失效
getCreationTime()获取创建时间
getLastAccessedTime()获取上次访问时间
URL重写

URL重写是一种补充的会话管理机制,当浏览器不支持Cookie时,可以将会话标识作为URL地址的一个特殊参数,从而继续实现会话管理。

HttpServletResponse接口中定义了两个用于完成URL重写的方法:

response.encodeURL("url");
response.encodeRedirectURL("url")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 管理员登录是一个常见的功能,可以通过以下步骤来实现: 1. 创建一个管理员登录页面,包含用户名和密码的输入框以及登录按钮。 2. 创建一个数据库表来存储管理员账号信息,包括用户名和密码。 3. 在后台编写登录验证的代码,将用户输入的用户名和密码与数据库中的账号信息进行比对,验证登录是否成功。 4. 如果登录成功,可以跳转到管理员后台管理页面,否则需要提示用户名或密码错误。 具体实现可以参考以下代码: 1. 创建管理员登录页面: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>管理员登录</title> </head> <body> <form action="login.jsp" method="post"> <label>用户名:</label><input type="text" name="username"><br> <label>密码:</label><input type="password" name="password"><br> <input type="submit" value="登录"> </form> </body> </html> ``` 2. 创建数据库表,例如: ```sql CREATE TABLE admin ( id INT(11) NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL, password VARCHAR(50) NOT NULL, PRIMARY KEY (id) ); ``` 3. 编写登录验证的代码,例如: ```java String username = request.getParameter("username"); String password = request.getParameter("password"); // 查询数据库中是否存在该管理员账号 Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456"); PreparedStatement ps = conn.prepareStatement("SELECT * FROM admin WHERE username=? AND password=?"); ps.setString(1, username); ps.setString(2, password); ResultSet rs = ps.executeQuery(); if (rs.next()) { // 登录成功,跳转到管理员后台管理页面 response.sendRedirect("admin.jsp"); } else { // 登录失败,提示用户名或密码错误 response.getWriter().write("用户名或密码错误!"); } ``` 4. 在后台管理页面进行相应的管理操作,例如: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>管理员后台</title> </head> <body> <h1>管理员后台</h1> <p>欢迎您,管理员!</p> <a href="logout.jsp">退出登录</a> </body> </html> ``` 以上是一个简单的管理员登录功能的实现,可以根据实际需求进行相应的改进和优化。 ### 回答2: 管理员登录是指使用JavaWeb技术实现的一种登录功能,用于管理用户信息和系统设置的权限认证。 首先,需要创建一个管理员用户表格,在表格中存储管理员的用户名和密码等信息。可以使用数据库来存储,例如MySQL。 在前端页面中,设计一个管理员登录界面,该界面应该包含输入框用于输入管理员用户名和密码,同时还有一个登录按钮。 接下来,在后端创建一个Servlet来处理管理员登录的请求。当管理员点击登录按钮后,该Servlet会获取前端页面输入的用户名和密码。 然后,该Servlet会与数据库中的管理员表进行对比,验证输入的用户名和密码是否匹配。如果匹配成功,即用户名和密码正确,那么管理员登录成功,可以跳转到管理管理页面;如果匹配失败,即用户名和密码不匹配,那么管理员登录失败,可以给出相应的错误提示信息。 管理员登录成功后,可以在管理管理页面中进行各种操作,例如管理用户信息、发布公告、修改系统设置等等。 为了增加安全性,还可以添加一些额外的功能,例如添加验证码功能,限制登录次数等。并且,在设计时应考虑密码加密存储和传输过程中的安全性问题。 总之,javaweb管理员登录是通过前端页面与后端Servlet的交互,验证管理员的用户名和密码,实现对系统关键功能的权限认证。它是管理系统安全性的重要一环。 ### 回答3: 在JavaWeb中,实现管理员登录功能需以下步骤。 1. 创建数据库表:首先要在数据库中创建一张表来存储管理员的相关信息,比如用户名和密码等。 2. 创建登录页面:通过HTML和CSS等技术创建一个登录页面,包括输入用户名和密码的文本框以及登录按钮。 3. 创建Servlet:创建一个Servlet来处理用户的登录请求。在该Servlet中,首先获取用户输入的用户名和密码。然后,可以通过JDBC连接数据库,查询数据库中是否存在该用户名及对应的密码。如果存在,就表示登录成功;如果不存在,就表示登录失败。 4. 验证登录信息:接下来需要对用户输入的用户名和密码进行验证,以确定用户是否输入正确的凭据。这可以通过使用JDBC执行查询语句来实现。 5. 登录状态处理:如果用户名和密码验证成功,则可以在会话(session)中记录一些登录状态信息,例如用户ID等,方便在后续的操作中使用。 6. 跳转到管理页面:登录成功后,可以使用Java的重定向技术将用户导向到管理页面,并在该页面上展示相应的管理功能。 以上是一个简单的javaweb管理员登录功能的实现过程。当然,为了能够有效地保护管理员登录的安全性,还可以采取其他安全措施,例如使用加密算法对密码进行加密存储、导航栏防御等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值