利用JSP session对象保持住登录状态

http协议本身是一种无状态的协议,也就是客户端连续发送的多个请求之间没有联系,下一次请求不关心上一次请求的状态。

而实际运用中却希望服务器能记住客户端请求的状态,比如在网上购物系统中,服务器端应该能够识别并跟踪每个登录到系统中的用户挑选并购买商品的整个流程 。为此,web服务器必须采用一种机制来唯一地标识一个用户,同时记录该用户的状态,这就要用到会话跟踪技术。

Java Web使用Session来跟踪会话和管理会话内的状态。

Session对象是一个jsp内置对象,它在第一个jsp页面被装载时自动创建,完成会话期管理。

从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。

当发生以下四种情形其中之一时,session对象中的数据便会清空 :
用户关闭目前正在使用的浏览器程序。
关闭网页服务器。
用户未向服务器提出请求超过预设的时间,Tomcat服务器预设为30分钟。
运行程序结束session。

1.建立session变量

在JSP中不需要特别设置程序代码来建立用户session,当程序使用了session对象时,便会自动建立session,而下面这行语句便是在session中新增变量数据的方式:
session.setAttribute(“变量名称”,变量内容)
变量内容可为字符串或者其他对象类型,接着让我们来看看如何使用这个方法在session中设置变量数据:

<%
session.setAttribute(“id”,”编号”); //设置字符串
session.setAttribute(“expire”,new Date(86400*10)); //设置日期
session.setAttribute(“level”,new Integer(3)); //设置整数
%>

2.返回session中的变量

在session中设置了变量数据后,在其他的各个网页中便可使用getAttribute读取其中的内容,此方法所返回的数据类型为对象(Object)类型,语法如下:
session.getAttribute(“变量名称”)

3.返回所有session中的变量名称

getAttributeNames()方法可以取出session中所有变量的名称,其结果为一个枚举类的实例。语法为:
session.getAttributeNames()

4.清除session中的变量
removeAttribute()方法可以清除session中的变量数据,使用语法如下:
session.removeAttribute(“变量名称”)

5.结束session

对于已经建立的session,可使用invalidate()方法将其结束,使用语法为:
session.invalidate()

其他的一些可能会用到的方法:

现在写一个实例:通过session来记录客户的登录状态:
index.jsp登录界面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
 <head>
  <title>$Title$</title>
 </head>
 <body>
 <form action="process_login.jsp" method="post">
  用户名:<input type="text" name="username">
  密码:<input type="text" name="password">
  <input type="submit" value="submit">
  <input type="reset" value="reset">
 </form>
 <a href="page1.jsp" rel="external nofollow" rel="external nofollow" >1</a>
 <a href="page2.jsp" rel="external nofollow" rel="external nofollow" >2</a>
 <a href="page3.jsp" rel="external nofollow" rel="external nofollow" >3</a>
 </body>
</html>

process_login.jsp处理登录数据,这里知道输入密码是123都可以登录成功:

session.getAttribute()将会告诉page1.jsp文件这个用户是否登录成功了

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
  String username=request.getParameter("username");
  String password=request.getParameter("password");
  if (password.equals("123")){
    session.setAttribute("username",username);
  }
  response.sendRedirect("page1.jsp");
%>

logout.jsp登出

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
  session.invalidate();
  response.sendRedirect("index.jsp");
%>

page1.jsp, page2.jsp, page3.jsp大同小异显示不同的页面,用于验证登录状态的记录(这里仅以page1.jsp为例):

注意这里的判断逻辑是一种很有趣的写法,把jsp代码和html代码完全融合起来了,不过我觉得这样写还是比较乱,宁愿只用一个jsp代码段,里面用out.println()在html中来实现显示不同的内容

这里主要是靠判断session.username是否为空来判断是否登录过了,并且传递相关的参数信息

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>Title</title>
</head>
<body>
  这里是Page1<br>
  <%if (session.getAttribute("username")==null){%>
  用户还没有登录
  <%}else {%>
  已登录,用户名:<%= session.getAttribute("username")%>
  <%}%>
  <br>
  <a href="page1.jsp" rel="external nofollow" rel="external nofollow" >page1</a>
  <a href="page2.jsp" rel="external nofollow" rel="external nofollow" >page2</a>
  <a href="page3.jsp" rel="external nofollow" rel="external nofollow" >page3</a>
  <a href="index.jsp" rel="external nofollow" >login</a>
  <a href="logout.jsp" rel="external nofollow" >logout </a>
</body>
</html>

可以看到,登录以后,不管跳转到哪个页面,用户的登录状态都没有丢失

一旦logout登出以后,session.invalidate()方法被调用,session被销毁,就跟踪不到用户的登录信息了

同时,如果我采用另一个浏览器访问同样的页面,以“2号用户”为username登录,也会一直记录到这个用户的登录信息(不过如果是同一种浏览器的话就不行了)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解springmvc 中controller与jsp传值

    在springmvc中的controller所对应的函数中,如果需要从*.jsp页面中获取数据,可以自行在函数括号中写,springmvc会自动封装传过来的值. spring-mvc.xml 中加入如下语句: <!-- 自动扫描 --> <context:component-scan base-package="cn.itcast.springmvc.service,cn.itcast.springmvc.web.controller"/> <!-- 注解

  • JSP 获取spring容器中bean的两种方法总结

    JSP 获取spring容器中bean的方法总结 方案1(Web中使用): ApplicationContext ct = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletActionContext.getServletContext()); logService = (ISysLogService) ct.getBean("sysLogServiceImpl"); 说明:getRequiredWeb

  • JSP 开发之 releaseSession的实例详解

    JSP 开发之 releaseSession的实例详解 Hibernate可以实现分页查询,昨天试了一下,分页效果不错.但是发现了一个问题,就是当请求超过20次的时候页面就会卡死.经检查,是卡在分页查询这一块. 应用程序采用struts2 + spring2 + hibernate3架构 连接池配置使用的是c3p0, 最大池大小为20, 很显然是连接池耗尽导致的. 增加连接池大小只是饮鸩止渴,总还有耗尽的时候,必须找到根本原因. Dao类的分页查询方法如下: java 代码  public Li

  • JSP spring boot / cloud 使用filter防止XSS

    JSP spring boot / cloud 使用filter防止XSS 一.前言 XSS(跨站脚本攻击) 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的. 二.思路 基于filter拦截,将特殊字符替换为html转意字符 (如

  • springMVC如何将controller中数据传递到jsp页面

    1> 将方法的返回值该为ModelAndView在返回时,将数据存储在ModelAndView对象中如: newModelAndView("/WEBINF/jsp/showData.jsp","message",message) 其中第一个参数为url,第二个参数为要传递的数据的key,第三个参数为数据对象. 在这里要注意的是 数据是默认被存放在request中的. 示例: @RequestMapping(value="/mad/showData_1

  • JSP 自定义注解及记录操作日志

    JSP 自定义注解及记录操作日志 Spring的配置文件 <aop:aspectj-autoproxy /> 日志拦截器 package com.vem.interceptor; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.anno

  • 利用JSP session对象保持住登录状态

    http协议本身是一种无状态的协议,也就是客户端连续发送的多个请求之间没有联系,下一次请求不关心上一次请求的状态. 而实际运用中却希望服务器能记住客户端请求的状态,比如在网上购物系统中,服务器端应该能够识别并跟踪每个登录到系统中的用户挑选并购买商品的整个流程 .为此,web服务器必须采用一种机制来唯一地标识一个用户,同时记录该用户的状态,这就要用到会话跟踪技术. Java Web使用Session来跟踪会话和管理会话内的状态. Session对象是一个jsp内置对象,它在第一个jsp页面被装载时

  • PHP根据session与cookie用户登录状态操作类的代码

     1.用户登录状态操作类UserLogin <?php final class UserLogin { public function __construct() { } public static function getUserInfo() { if (isset($_COOKIE["user_id"])&&$_COOKIE["user_id"]&&(trim($_COOKIE["user_id"])!=

  • Session对象失效的客户端解决方法

    ASP(Active Server Pages)技术的Session对象用于存储用户在对话期间的私有信息.当前用户的Session对象中定义的变量和对象能在页面之间共享,但是不能为应用中其他用户所访问,因此在用ASP开发网络应用程序时,可以利用Session对象保存和跟踪用户的状态信息. Session对象有一个十分重要的属性:Timeout,它用于设置在会话资源被释放前,会话对象所能保持非活动状态的时间(默认值为20分钟).当Timeout属性设置的时间值耗尽后,会话资源将被释放.通过Time

  • flask使用session保存登录状态及拦截未登录请求代码

    本文主要研究的是flask使用session保存登录状态及拦截未登录请求的相关内容,具体介绍如下. 前端请求form: <form action="/user/add" method="get"> <input type="text" name="username" value="111"> <input type="submit" value="

  • Django Session和Cookie分别实现记住用户登录状态操作

    简介 由于http协议的请求是无状态的.故为了让用户在浏览器中再次访问该服务端时,他的登录状态能够保留(也可翻译为该用户访问这个服务端其他网页时不需再重复进行用户认证).我们可以采用Cookie或Session这两种方式来让浏览器记住用户. Cookie与Session说明与实现 Cookie 说明 Cookie是一段小信息(数据格式一般是类似key-value的键值对),由服务器生成,并发送给浏览器让浏览器保存(保存时间由服务端定夺).当浏览器下次访问该服务端时,会将它保存的Cookie再发给

  • jsp cookie+session实现简易自动登录

    本文实例为大家分享了jsp cookie+session实现简易自动登录的具体代码,供大家参考,具体内容如下 关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效. 如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间. login.jsp <%@ page language="java" contentType="text/html;

  • c#利用Session对象实现购物车的方法示例

    本文实现了c# Session对象实现购物车的方法,分享给大家,也给自己留个笔记: //shopcart.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; usi

  • 利用DataSet部分功能实现网站登录

    首先,我之前必须完成过注册,并把个人信息存入数据库中. 其次,这部分的个别对象是存于某些文档中的,需要引用命名空间. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using ZG.Common;//后面用到ScriptHelper对象(ScriptHelper.cs

  • JSP+MySQL实现网站的登录与注册小案例

    为了练手,我就自己试着做了一个网站的登录与注册的小案例.由于没有做美化处理,所以界面并不是很好看. 网站实现的功能如下:  •用户首次注册功能  •用户登录功能 下面我将会分模块展示 注册模块 首先需要一个注册界面,如下register.jsp: <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOC

  • jQuery基于ajax实现页面加载后检查用户登录状态的方法

    本文实例讲述了jQuery基于ajax实现页面加载后检查用户登录状态的方法.分享给大家供大家参考,具体如下: 拥有会员功能的网站,如果会员已经登录,那么要显示相应的登录状态,而且这种显示的需求是在网站的每个页面都有的(目前国内网站貌似都是这么做的,还没有见过其他形式的状态显示方式),这样,在打开一个新的页面时就要知道这个会员是否已经登录,需要判断登录的状态. 1.解决方案. 为了能够实现在每一个页面判断会员登录状态的功能,我采用了页面时通过ajax传递参数通过后端返回的登录状态结果进行判断,当然

随机推荐