`
thjjava
  • 浏览: 27129 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Java session学习

阅读更多
今天项目中突然要使用Session,以前也没怎么用过,于是在网上搜索了一番,然后从各大神的资料中摘抄了一些

一、Session的生命周期

  Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。

  Session什么时候失效?

  1. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。

  2. 调用Session的invalidate方法。

  Session对浏览器的要求:

  虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。

    该Cookie为服务器自动生成的,它的maxAge属性一般为-1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session。但是由浏览器窗口内的链接、脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的Cookie,因此会共享一个Session。

  注意:新开的浏览器窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session。例如,在链接上右击,在弹出的快捷菜单中选择"在新窗口中打开"时,子窗口便可以访问父窗口的Session。

    如果客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?例如,绝大多数的手机浏览器都不支持Cookie。Java Web提供了另一种解决方案:URL地址重写。

  URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。HttpServletResponse类提供了encodeURL(String url)实现URL地址重写,该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动地输出来。如果客户端不支持Cookie,则会将用户Session的id重写到URL中。

  注意:TOMCAT判断客户端浏览器是否支持Cookie的依据是请求中是否含有Cookie。尽管客户端可能会支持Cookie,但是由于第一次请求时不会携带任何Cookie(因为并无任何Cookie可以携带),URL地址重写后的地址中仍然会带有jsessionid。当第二次访问时服务器已经在浏览器中写入Cookie了,因此URL地址重写后的地址中就不会带有jsessionid了。

二、Session的使用

在Java Web开发中,Session为我们提供了很多方便,Session是由浏览器和服务器之间维护的。Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠时间)没有与服务器交互,服务器将此Session销毁,客户端再一次与服务器交互时之前的Session就不存在了。

设置Session超时时间方式:

方式一:
在web.xml中设置session-config如下:
<session-config>
  <session-timeout>2</session-timeout>
</session-config>

即客户端连续两次与服务器交互间隔时间最长为2分钟,2分钟后session.getAttribute()获取的值为空

API信息:
  session.getCreationTime()   获取session的创建时间
  session.getLastAccessedTime()  获取上次与服务器交互时间
  session.getMaxInactiveInterval() 获取session最大的不活动的间隔时间,以秒为单位120秒。
 
方式二:
在Tomcat的/conf/web.xml中session-config,默认值为:30分钟
<session-config>
        <session-timeout>30</session-timeout>
    </session-config>

方式三:
在Servlet中设置
  HttpSession session = request.getSession();
  session.setMaxInactiveInterval(60);//单位为秒

说明:
1.优先级:Servlet中API设置 > 程序/web.xml设置 > Tomcat/conf/web.xml设置
2.若访问服务器session超时(本次访问与上次访问时间间隔大于session最大的不活动的间隔时间)了,即上次会话结束,但服务器与客户端会产生一个新的会话,之前的session里的属性值全部丢失,产生新的sesssionId
3.客户端与服务器一次有效会话(session没有超时),每次访问sessionId相同,若代码中设置了session.setMaxInactiveInterval()值,那么这个session的最大不活动间隔时间将被修改,并被应用为新值。
4.Session的销毁(代表会话周期的结束):在某个请求周期内调用了Session.invalidate()方法,此请求周期结束后,session被销毁;或者是session超时后自动销毁;或者客户端关掉浏览器
5.对于JSP,如果指定了<%@ page session="false"%>,则在JSP中无法直接访问内置的session变量,同时也不会主动创建session,因为此时JSP未自动执行request.getSession()操作获取session。

总结:

       在程序开发过程中,我们可以在客户端每次与服务器交互时检查SessionID(Session中属性值,非HttpServlet环境开发中也可以用其它的Key值代替),用于会话管理。

分享到:
评论

相关推荐

    java session

    ### Java Session概述与常见问题解析 #### 一、Java Session概念及作用 在Web开发中,`Java Session...通过本篇文章的学习,我们可以更好地理解和掌握Java Session的相关知识点,为日常的Web开发工作提供有力的支持。

    java Session cookie

    Java Session Cookie是Web应用程序中用于实现用户会话跟踪的一种机制。在HTTP协议中,由于其无状态特性,服务器无法在多次请求之间保持用户的上下文信息。为了解决这个问题,Session和Cookie应运而生,而Session ...

    java中使用session购物车的简单例子

    在Java Web开发中,Session是HTTP协议中一种用于在客户端和服务器之间保持状态的重要机制。在本例中,“java中使用session购物车的简单例子”是...通过分析和学习这个示例,可以深入理解Session在实际开发中的应用。

    一个关于Session的小demo

    1. **初始化Session**:在JSP页面中,我们可以使用`&lt;jsp:useBean&gt;`标签或者Java代码来创建一个新的Session。例如: ```java HttpSession session = request.getSession(); ``` 2. **设置Session属性**:一旦...

    java购物车session

    在Java Web开发中,...而"java购物车session"这个资源则提供了一个基础的实现,适合初学者学习和练习。通过分析和修改这个项目,你可以深入理解session的用法,以及如何在Java Web环境中构建一个基本的购物系统。

    j2ee实验二:学习使用Session和Cookie

    ### j2ee实验二:学习使用Session和Cookie #### 实验背景与目标 在现代Web应用开发中,理解和掌握会话管理和用户认证是至关重要的。本实验旨在通过一系列实际操作来帮助学生熟悉J2EE环境下Session和Cookie的工作...

    Session-JavaWeb专题

    ### Session—JavaWeb专题 #### 一、Session概念与工作机制 **Session** 是一种服务器端...通过本课程的学习,你不仅能够掌握 Session 的基本概念和使用方法,还能了解到 Session 在实际开发中的应用场景和最佳实践。

    JAVA的hibernate手动获取session的方法

    在Java应用中,我们需要先初始化SessionFactory,然后通过SessionFactory来创建Session实例。 以下是如何手动获取Session的基本步骤: 1. **配置Hibernate**:在项目的资源目录下创建`hibernate.cfg.xml`配置文件...

    hibernate和session学习

    【hibernate与Session详解】 Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库...学习并熟练掌握Hibernate和Session,对于提升Java开发的效率和质量有着重要的作用。

    Java全栈学习路线及知识清单

    Java全栈学习路线及知识清单 Java全栈学习路线是指从Java基础到JavaWeb、JavaEE、Linux运维、分布式与微服务、大数据开发的完整学习路线。下面是Java全栈学习路线的详细知识点: 一、Java基础 Java基础知识是Java...

    JAVA_JSP学习系列

    本"JAVA_JSP学习系列"着重于为初学者提供深入浅出的学习资源,通过实例教学,帮助读者快速掌握JSP的核心概念和实践技巧。 首先,JSP是Java平台上的一个标准,用于开发服务器端应用程序,特别是Web应用。它允许...

    用java运用cookie和session

    在Java Web开发中,Cookie和Session是两种常用的技术,用于管理客户端和服务器之间的会话状态。它们在实现用户登录状态保持、个性化设置保存等方面发挥着重要作用。本篇将深入探讨如何在Java中有效地运用Cookie和...

    java web学习课件

    Java Web学习课件主要涵盖了基于J2EE平台的Web应用开发技术,这是一套非常实用的学习资源,适合初学者和有经验的开发者进行复习和提升。J2EE(Java 2 Platform, Enterprise Edition)是Oracle公司提供的一个企业级...

    JSP Session 学习笔记---JSP Session 学习笔记

    JSP Session 学习笔记

    java学习手册

    java学习手册是专门为java开发者开发的一款APP,目前只支持Android系统,各大应用商店均可下载。 这款应用面向所有想学习Java或正在学习Java的朋友们,...8,java ee模块,介绍了EJB、Session Bean、事务等基本内容。

    java 学习方向 个人整理

    Java学习之路是一个逐步深入的过程,涉及多个层面的技术和框架。以下是对这个学习方向的详细解析: 1. **J2SE**:Java标准版是Java的基础,涵盖了面向对象编程、核心类库、IO流、多线程、网络编程、反射机制等内容...

    Java后端学习路线 (详细路线)

    学习Java开发,首先要学习java基础知识,尤其是校招的时候非常注重基础,即使没有项目也没关系,基础一定要打好,一般笔试以及面试的第一轮,对基础的考察是比较多的。 第二阶段:数据库 大概用时:7天 重点知识点...

    java源码包---java 源码 大量 实例

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一...

    javaweb用户验证码登录session例子

    在Java Web开发中,用户登录验证是不可或缺的一部分,而在这个"javaweb用户验证码登录session例子"中,我们将深入探讨如何结合验证码、用户密码以及Session技术来实现安全的登录过程。Session是Web应用中用于跟踪...

    jsp-session测试

    【JSP Session 测试】是Java初学者在学习如何在JSP页面中使用Session对象时的一个常见实践案例。在这个练习中,我们将深入了解JSP Session的概念、工作原理以及如何在实际项目中有效地应用它。 首先,Session是Java...

Global site tag (gtag.js) - Google Analytics