`
南瓜猿
  • 浏览: 45086 次
  • 性别: Icon_minigender_1
  • 来自: 长沙市
社区版块
存档分类
最新评论

JSP会话跟踪学习

    博客分类:
  • J2EE
阅读更多

先开门见山~本文将解决以下三个问题:

1.什么是会话跟踪?

2.举例阐述四种会话跟踪技术的特点,应用场景

3.Cookie与Session的区别

 

问题一:

首先,我们要明确一下会话的概念,什么是会话?客户端打开与服务器的连接发出请求到服务器响应客户端请求的全过程称之为会话。那么显而易见,会话跟踪便是对此过程进行跟踪(监听),对同一个用户对服务器的连续的请求和接受响应所进行的监视 。

然后,我们为什么需要会话跟踪技术呢?因为http协议是无状态协议,不能保存用户信息,即一次响应完成之后连接就断开了,下一次的请求需要重新连接,这样就需要判断是否是同一个用户,为了防止这种情况的发生,我们需要用到会话跟踪技术。

会话跟踪的过程可以这样描述:

当服务器响应客户端的第一次请求时,将会自动创建一个新的session对象(该对象实现了HttpSession接口)和一个唯一的ID分配给该请求, 通过临时Cookie的方式响应给浏览器, 浏览器在以后的请求过程中,都会先获取临时Cookie中的SessionID,在请求过程中,会带上SessionID一起发送给服务器。服务器收到请求后,会先判断SessionID是否存在,如果不存在,说明是第一次请求;如果存在,证明这次请求和上次请求是同一个浏览器发送的;如果有多个浏览器同时请求服务器,服务器会根据SessionID找到对应的浏览器。

 

问题二:

四种常用的会话跟踪方法有:隐藏表单域,URL重写,Cookie,Session

1:隐藏表单域

是指在表单form内声明一个type类型为hidden的input标签,用来传递数据(可以在页面内先用JQuery获取要传递的值存入这个input标签的value中)和做一些其它的功能。它的优点是提供了一种往form中存取数据的方法。 

测试页面:page1.html,page2.jsp

由page1向page2提交表单,并通过隐藏表单域的方式提交page1的ID

page1.html关键代码:

 

	<form action="page2.jsp" method="post">
		<input type="hidden" name="id" value="1"> 帐号:<input
			type="text" name="username" value="nangua" /><br /> <input
			type="submit" value="我要登录" /><br />
	</form>

 page2.jsp关键代码:

 

 

	<%
	String id = request.getParameter("id");
	%>
	<h1>收到id:<%=id%></h1>

 2:URL重写

URL重写的目的是为了防止用户(浏览器)禁用cookie。

测试页面:page1.jsp ,page2.jsp

这里先写一个小例子:

page1.jsp关键代码:

 

	<%
		String url = "page2.jsp?id=1";
	%>
	<a href='<%=response.encodeUrl(url)%>'>page2.jsp</a>

 page2.jsp关键代码:

<%
 String id = request.getParameter("id");
%>
<%=id %>

 通过在url后面直接追加参数的方式可以将id传给page2,因此,如果把会话id编写在URL中,即使浏览器关闭了或不支持cookie,也能够实现会话跟踪。

弊端:这意味着应用程序中的所有页面(至少是那些带有对其他页面引用的页面)都必须是JSP页面,这样页面引用才能以动态方式进行编码,如果遗漏了一个ur,那么服务就会失去对会话的跟踪。

因此,我们可以通过以下方式实现通过对URL重写实现会话跟踪:

page1.jsp关键代码:

 

<%=session.getId()%>
	<%
	 
		String url = "page2.jsp?id=1";
		String a = response.encodeURL("page2.jsp");
	%>
	<a href='<%=a%>'>page2.jsp</a>

 

page2.jsp关键代码:

 

<%
 String id = request.getParameter("id");
%>
<%=id %>

 运行效果:

 



 可以看到,page2的URL后边增加一个JSESSIONID 即当前会话的sessionID。这样便可实现在无cookie的情况下实现会话跟踪了。

 

3.Cookie

 使用原理:

服务器默认创建一个Cookie回传给用户:(Cookie cookie = new Cookie("JSESSIONID",session.getId());response.addCookie(cookie);)此cookie的默认生命周期为关闭浏览器cookie即销毁,所以当浏览器关闭后,使用cookie实现的回话跟踪应用(如购物)将会失效。一般大型网站都是使用cookie来进行会话跟踪,以大幅减轻服务器的压力。

这里还要提一下会话cookie和持久cookie的区别 :

  如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。 

  如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。 

测试程序:

同样是page1.jsp和page2.jsp

page1.jsp关键代码:

 

 <%
      Cookie cookie = new Cookie("ID", "jiangzhengnan");  
         cookie.setMaxAge(30*60);//设置放置sessionId的cookie的生命周期为30分钟  
       
         response.addCookie(cookie);  
 %>
	<a href='page2.jsp'>page2.jsp</a>

 

page2.jsp关键代码:

 

			<%
				Cookie cookies[]=request.getCookies(); 
				Cookie sCookie=null; 
				String svalue=null; 
				String sname=null;  
				for(int i=0;i<cookies.length;i++){ 
					sCookie=cookies[i]; 
					svalue=sCookie.getValue(); 
					sname=sCookie.getName(); 
					 
					out.write("name:["+sname + "] value:["+svalue + "]");
				} 
			%>

 运行图示:

 


 

 
 可以看到最后是我自己设置的cookieid

4.Session

session的生命周期和原理在文章开头已经详述过了,这里就不再赘述。

 = =这个就比较容易实现,直接上代码吧

page1.jsp:

 

           <%
			       session = request.getSession();
					session.setAttribute("username","nangua");
		   %>
          
	<a href='page2.jsp'>page2.jsp</a>

 

 

page2.jsp:

 

  <%session = request.getSession();
	%>	  
	 <%=session.getAttribute("username")%><br>  

 

 

问题三:Cookie和Session的区别

1:位置:

          Cookie是存在浏览器中的,Session是存在服务器中的。

2:安全性:

         Cookie的安全性要低于Session,因为Cookie可能会被用户禁用,而且黑客可以分析存放在本地的Cookie并进行Cookie欺骗。

3:数据存储方式:

         Session的数据是存在服务器内存中,关掉浏览器,会清空Session。

         临时性Cookie存在浏览器的缓存中,关掉浏览器,会清空

         永久性Cookie是存在临时文件中,到达有效期前,一直存在

 4:存取方式比较(摘自网络):

         Cookie中只能保存ASCII字符串,如果需要存取Unicode字符或者二进制数据,需要进行UTF-8、GBK或者BASE64等方式的编码。Cookie中也不能直接存取Java对象,若要存储稍微复杂的信息,使用Cookie是比较困难的。

         而Session中可以存取任何类型的数据,包括String、Integer、List、Map等。Session中也可以直接保存JavaBean及至任何Java对象等,使用起来非常方便,可把Session看做是一个Java容器类。

 5:对服务器的负担比较:

         因为Session是保存在服务端的,如果用户数量极多,对服务器负担较大。

         而Cookie是保存在客户端,不占用服务器资源,所以适合于大多数网站。

         这里要注意:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

6:有效期比较(摘自网络)

         要达到长久地记录用户的登录信息的效果,使用Cookie会是比较好的选择。只需要设置Cookie的maxAge属性为一个很大很大的数据字或者Integer.MAX_VALUE就可以了。Cookie的maxAge属性支持这样的效果。

         使用Session理论上也能实现这种效果。只要调用方法setMaxInactiveInterval(Integer.MAX_VALUE)不就可以了么。但是由于Session依赖于名为JSESSIONID的Cookie,而Cookie JSESSIONID的maxAge默认为-1,关闭了浏览器该Session就会失效,因此Session不能实现信息永久有效的效果。使用URL地址重写也不能实现。

而且如果设置Session的超时时间过长,服务器累计的Session就会越多,越容易导致内存溢出。

7:跨域名比较:

         Cookie支持跨域名访问,例如将domain属性设置为“.helloweenvsfei.com”,则以它为后缀的所有域名均可以访问该Cookie。而Session则不会支持跨域名访问,仅在它所在的域名内有效。

 

写完发现不知不觉已经快1点半了= =本来想写点什么留给未来の自己看的感慨的话,然而现在应该做的就是滚上床睡觉吧2333333333

                  继续努力~

         不要懈怠~

 

 

 

  • 大小: 18.9 KB
  • 大小: 28.2 KB
  • 大小: 18.3 KB
  • 大小: 24.9 KB
4
4
分享到:
评论

相关推荐

    第5章 会话跟踪.rar

    同时,还可以学习如何结合其他会话跟踪方法,如Cookie和URL重写,来增强应用的功能和用户体验。 在Java JSP中,会话跟踪经常与EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)结合使用...

    完整版Java JSP web开发教程 03_会话跟踪简介(共22页).ppt

    在Java JSP web开发中,会话跟踪是维持用户在网站上交互过程中的状态的关键技术。当用户浏览多个页面时,服务器需要识别这些请求来自同一个用户,以便提供个性化的服务,如购物车功能或者保持登录状态。会话跟踪允许...

    JavaWeb会话跟踪技术

    在JavaWeb开发中,会话跟踪是至关重要的一个环节,它允许服务器在多个HTTP请求之间保持用户的状态。...通过学习和实践这些内容,你将能够熟练地在JavaWeb项目中实现有效的会话跟踪,提高用户体验。

    java web整合开发王者归来光盘代码-第五章 会话跟踪

    在Java Web开发中,会话跟踪是至关重要的一个环节,特别是在构建复杂的Web应用程序时,如JSP、Servlet、Struts、Hibernate以及Spring等框架的整合应用。本资源"java web整合开发王者归来光盘代码-第五章 会话跟踪...

    JSP网络编程学习笔记源代码 part2

    第二篇为“Servlet核心技术”,主要讲述Servlet的技术特点、请求和响应、数据共享、会话跟踪等技术;第三篇为“JSP技术基础”,主要讲述JSP的基本语法和内建对象及JSP和Servlet的集成,JavaBean和表达式语言;第四篇...

    JavaWeb03-会话跟踪cookie与session.rar

    JavaWeb03-会话跟踪cookie与session.rar JavaWeb04-内置对象与include指令.rar JavaWeb05-购物车.rar JavaWeb06-Servlet.rar JavaWeb07-javaWeb模式.rar JavaWeb08-DBUtil.rar JavaWeb09-EL与JSTL.rar JavaWeb10-...

    Jsp学习源码

    **Jsp_Cookie_0424**:Cookie是客户端会话跟踪的一种方式。这里你将学习如何在JSP中创建、读取和删除Cookie,以及设置Cookie的生命周期。 通过这些源码,你可以深入理解JSP的核心概念,包括数据交互、会话管理、...

    JSP基于servlet的登录注册会话实验

    在IT行业中,Web开发是不可或缺的一...通过这个实验,学习者将能掌握基本的Servlet和JSP编程技巧,了解会话管理的重要性,并能够实现一个完整的登录注册系统。在实践中不断探索和优化,可以提升Web开发的技能和经验。

    servlet和jsp学习指南

    - 掌握通过Servlet进行会话跟踪和管理,了解Cookie和Session的使用方法。 - 探索Servlet的过滤器(Filter)和监听器(Listener)机制,以及它们在应用中的实际应用场景。 2. JSP技术的原理和应用 - JSP是一种...

    JSP在线学习系统设计(源代码+论文).zip

    6. **会话管理**:在线学习系统需要跟踪用户状态,例如登录信息、学习进度等,这需要用到会话管理。JSP提供内置对象HttpSession,可以用来创建和管理用户会话。 7. **安全机制**:为了保护用户数据和系统安全,系统...

    从零开始学习jsp编程

    3. session:用于跟踪用户的会话状态。 4. application:处理整个Web应用程序的数据。 5. out:输出到客户端的流。 6. pageContext:提供对所有范围的访问和页面上下文信息。 7. page:引用当前JSP页面的实例。 8. ...

    jsp基础学习

    - `session`对象:提供了会话跟踪的功能,可以在多个页面间共享数据。 - `application`对象:在整个应用生命周期内共享数据。 - `out`对象:用于向响应输出流写入内容。 - `pageContext`对象:提供对当前页面上...

    jsp中文帮助文档和学习资料

    3. **session**:用于跟踪用户的会话。 4. **application**:在整个应用范围内共享数据。 5. **pageContext**:提供对所有作用域的访问以及与其他JSP对象的交互。 6. **out**:用于向响应输出流写入内容。 7. **page...

    【免费】servlet和jsp学习指南-高清版

    5. **会话管理**:通过HttpSession对象实现用户会话跟踪,处理会话超时和会话失效问题。 6. **请求转发和重定向**:掌握这两种不同的请求处理方式,以及它们的区别。 7. **过滤器(Filter)**:利用Filter接口拦截...

    Servlet&JSP;学习笔记源代码

    6. **会话管理**:如何在Servlet和JSP中创建、跟踪和销毁用户的会话,以及处理会话超时和安全性问题。 7. **请求转发与重定向**:在Servlet中,如何使用request.getRequestDispatcher()和response.sendRedirect()...

    jsp web开发学习实录源代码(1-12章)

    8. **会话跟踪**: - **session对象**:学习如何使用session来跟踪用户状态,实现用户登录验证等功能。 - **cookie管理**:理解cookie的原理,以及如何与session结合使用。 9. **请求参数处理**: - **GET与POST...

    jsp阶段学习重点问题.doc

    - `session`:跟踪用户会话,存储用户状态信息。 - `application`:全局范围的对象,与整个Web应用关联。 - `page`:当前JSP页面对象,等同于`this`关键字。 - `config`:包含Servlet的初始化参数。 - `...

    jsp学习总结适合学生看的

    - **会话管理**:`session`对象用于跟踪用户状态,避免跨请求数据丢失。 - **页面重用**:`include`指令或动作标签实现代码复用,提高开发效率。 - **转发与重定向**:`request.getRequestDispatcher()`和`response....

    在线学习系统(jsp 毕业设计)

    这涉及到会话管理,可能使用session或cookie来跟踪用户状态。同时,权限控制确保用户只能访问其允许的资源。 5. **课程管理** 在线课程的创建、发布、分类和搜索是系统的关键功能。课程信息可能包括课程名、讲师、...

    Servlet和Jsp学习指南源代码.rar

    3. **会话管理**:使用HttpSession对象存储用户会话信息,实现会话跟踪。 4. **转发和重定向**:`RequestDispatcher`的`forward()`和`sendRedirect()`方法用于在Servlet和JSP之间传递控制。 5. **JSP内置对象**:...

Global site tag (gtag.js) - Google Analytics