热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JSP技术基础(5)(session、cookie对象)

在Web开发中,客户端与服务器端进行通信是以HTTP协议为基础的,而HTTP协议本身是无状态的,无状态是指协议对于事务处理没有记忆能力。H

在 Web 开发中,客户端与服务器端进行通信是以 HTTP 协议为基础的,而 HTTP 协议本 身是无状态的,无状态是指协议对于 事务处理 没有记忆能力。HTTP 无状态的特性严重阻碍了 WEB 应用程序的实现,毕竟交互是需要承前启后的,例如,典型的购物车程序需要知道用户到底在其他页面选择了什么商品。有两种用于保持 HTTP 连接状态的技术,它们是 SessionCOOKIE

目录

1、session

 2、COOKIE



 


1、session



session 对象是 javax.servlet.http.HttpSession 接口的实例对象。session 对象是 用 户 首 次 访 问 服务器时由服务器自动为其建的 , 在 JSP 中 可 以 通 过 调 用 HttpServletRequest 的 getSession(true)方法获得 session 对象。在服务器创建 session 对象的同时,会为该 session 对象生成唯一的 session id,在 Session 对象被创建之后, 就可以调用 session 的相关方法操作 session 对象的属性,当然,这些属性内容只保存在 服务器中,发到客户端的只有 session id;当客户端再次发送请求的时候,会将这个 session id 带上,服务器接受到请求之后就会依据 session id 找到相应的 session 对象, 从而再次使用它。正是这样一个过程,用户的状态也就得以保持了。 需要注意,只有访问 JSP、Servlet 等程序时才会创建 session 对象,只访问 HTML、 IMAGE 等静态资源并不会创建 session 对象。
session 对象的管理细节如下:
(1)新客户端向服务器第一次发送请求的时候,request 中并无 sessionidID 。
(2)此时,服务器端会创建一个 session 对象,并分配一个 sessionID,serssion 对象会保存在服务器端。此时 session 对象的状态处于 new state 状态,如果调用 session.isNew()方法,则返回 true。
(3)服务器端处理完毕后,将此 sessionID 随同 response 一起传回到客户端,并将其存入到客户端的 COOKIE 对象中。
(4)当客户端再次发送请求时,会将 sessionID 同 request 一起传送给服务器。
(5)服务器根据传递过来的 sessionID,将与该请求与保存在服务器端的 session 对象进行关联,此时,服务器上的 session 对象已再不处于 new state 状态,如果调用 session.isNew(),则返回 false。

 

 

Tomcat 中 Session 的默认超时时间为 30 分钟。可以通过修改 tomcat→conf→
conf/web.xm 中的,修改默认超时时间,单位为分钟,例如修改默认超
时时间为 60 分钟:


60

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+
request.getServerPort()+path+"/";
%>
<%--进行登录验证--%>
<% request.setCharacterEncoding("utf-8") ; //获取用户请求信息,首次请求是没有这些信息的,从页面填写信息提交后再次请求就有这些信息了。 String user = request.getParameter("user"); String password = request.getParameter("password"); if ("admin".equals(user) && "123".equals(password)) { request.getSession().setAttribute("username", user); //将用户名保存在 session 中 request.getSession().setAttribute("password", password); //将用户名保存在 session 中
%>

<% }
%>

<%=path %>
<%=basePath %> <% //检查请求中是否有用户名和密码信息,//如有但不符要求则输出错误信息 if (null != user && null != password) {
%> <% } %>
用户登录
用户名或密码错误,请重新登录!
登录名:
密码


 

<%@page import="java.text.SimpleDateFormat"%>
<%@page import="javax.xml.crypto.Data"%>
<%@ page cOntentType="text/html;charset=utf-8"%>
logok02当前用户(用户名从 session 中获取):
<%=request.getSession().getAttribute("username")%>

<%=request.getSession().getAttribute("password")%>

从 request 对象中获取了如下参数:
info=<%=request.getParameter("info")%>
user=<%=request.getParameter("user")%>
password=<%=request.getParameter("password")%>
<%SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");String CreatiOnTime=sdf.format(session.getCreationTime());%>CreatiOnTime=<%=CreationTime %>
返回登录页面

 

<%@ page cOntentType="text/html;charset=utf-8"%>
logok当前用户(用户名从 session 中获取):
<%=request.getSession().getAttribute("username")%>

<%=request.getSession().getAttribute("password")%>

从 request 对象中获取了如下参数:
info=<%=request.getParameter("info")%>
user=<%=request.getParameter("user")%>
password=<%=request.getParameter("password")%>
返回登录页面


 2、COOKIE


COOKIE 也一种会话跟踪机制。COOKIE 对象虽然不是 JSP 的内置对象,使用时需要显 式创建该对象,但 JSP 设计时也经常使用 COOKIE 技术来实现一些特殊功能。

COOKIE 是 WEB 服务器通过浏览器在客户机的硬盘上存储的一小段文本,用来记录用户登录的用户名、密码、登录时间等信息。当用户下次再次登录此网站时,浏览器根据用户输入的网址,在本地寻找是否存在与该网址匹配的 COOKIE,如果有,则将该 COOKIE 和求参数一起发送给服务器做处理,实现各种各样的个性化服务。


COOKIE COOKIE =new COOKIE("username","Jack");
response.addCOOKIE(COOKIE);

读取客户端的 COOKIE 信息的方法如下:
JSP 通过调用 request.getCOOKIEs()从客户端读入 COOKIE 对象数组。再用循环语句 访问该数组的各个 COOKIE 元素,调用 getName()方法检查各个 COOKIE 的名字,直至找 到目标 COOKIE,然后对该 COOKIE 调用 getValue()方法取得与指定名字关联的值。
COOKIE 存取中文时可能会出现乱码,这是因为 COOKIE 文件是以 ASCII 编码格式存储 的,占 2 个字节,而中文则属于 Unicode 中的字符,占 4 个字符。所以,如果想在 COOKIE 中保存中文的话,必需得进行相应的编码后才能正确存储,读取时再解码。
保存时,使用 java.net.URLEncoder.encode(String s,String enc)对中文进行 编码
读取时,使用 java.net.URLDecoder.decode(String s,String enc)进行解码。

<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" import="java.net.*" cOntentType="text/html; charset=UTF-8" %>



<%
COOKIE COOKIE = new COOKIE(URLEncoder.encode("姓名","UTF-8"), URLEncoder.encode("杰克","UTF-8")); COOKIE.setMaxAge(60*60); //设定该 COOKIE 在用户机器硬盘上的存活期为 1 小时 response.addCOOKIE(COOKIE); String userIp=request.getRemoteAddr();
COOKIE=new COOKIE("userIp",userIp);
COOKIE.setMaxAge(10*60); //设定 COOKIE 在用户机器硬盘上的存活期为 10 分钟 response.addCOOKIE(COOKIE); SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年 MM 月 dd 日 h:m:s");
Date date=new Date();String logintime=sdf.format(date); COOKIE=new COOKIE("loginTime",URLEncoder.encode(logintime,"UTF-8"));
COOKIE.setMaxAge(20*60); //设定 COOKIE 在用户机器硬盘上的存活期为 20 分钟
response.addCOOKIE(COOKIE); out.print("成功保存了姓名、用户 IP 地址和登录时间到客户机的 COOKIE 中了!");
%>

去读取 COOKIE

<%@ page language="java" import="java.net.*" cOntentType="text/html; charset=UTF-8"%>


使用 foreach 循环读取 COOKIE 数组,并输出其中所有的 COOKIE:

<% if(request.getCOOKIEs()!=null){ for(COOKIE COOKIE : request.getCOOKIEs()){ String name =URLDecoder.decode(COOKIE.getName(),"UTF-8"); String value = URLDecoder.decode(COOKIE.getValue(),"UTF-8"); out.println("
COOKIE 属性:"+name+"="+value); } } %>

使用 for 循环,查找某个 COOKIE

<% COOKIE myCOOKIE[]=request.getCOOKIEs(); //创建一个 COOKIE 对象数组 COOKIE COOKIE=null; for(int i=0;i%> 你好,你的上次登录的 IP 地址是<%=COOKIE.getValue()%>!
<% } } %>

 

 

 



推荐阅读
  • zabbix中文乱码的问题
    在使用zabbix时,有时候会出现中文乱码的问题,如下:因为zabbix自身对中文简体的支持不完善,需要我们手动的去上传新的字体进行替换:1、在windows获取字体库文件在Windows上的 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • .NetCoreWebApi生成Swagger接口文档的使用方法
    本文介绍了使用.NetCoreWebApi生成Swagger接口文档的方法,并详细说明了Swagger的定义和功能。通过使用Swagger,可以实现接口和服务的可视化,方便测试人员进行接口测试。同时,还提供了Github链接和具体的步骤,包括创建WebApi工程、引入swagger的包、配置XML文档文件和跨域处理。通过本文,读者可以了解到如何使用Swagger生成接口文档,并加深对Swagger的理解。 ... [详细]
  • 【爬虫】关于企业信用信息公示系统加速乐最新反爬虫机制
    ( ̄▽ ̄)~又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构。升级后网站的层次结构并没有太多变化,表面上 ... [详细]
  • 找到JDK下载URL当然去官网找了。目前最新的1.8的下载URL(RPM)如下:http:download.oracle.comotn-pubjavajdk8u161-b122f3 ... [详细]
  • 一.常见基于身份识别进行反爬1通过headers字段来反爬headers中有很多字段,这些字段都有可能会被对方服务器拿过来进行判断是否为爬虫1.1通过headers中的User-A ... [详细]
  • PHP连接MySQL的2种方法小结以及防止乱码【PHP】
    后端开发|php教程PHP,MySQL,乱码后端开发-php教程PHP的MySQL配置报错信息:ClassmysqlinotfoundinAnswer:1.在confphp.ini ... [详细]
  • Java大文件HTTP断点续传到服务器该怎么做?
    最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传。这里在简要归纳一下,方便记忆 ... [详细]
author-avatar
手机用户2502856237
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有