ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

【转载】会话管理

【转载】会话管理 一、会话管理的概念和基本原理一为什么进行会话管理Web应用程序基于HTTP协议HTTP基于请求/响应模式– 所有请求都是相互独立的无连续性的HTTP是无连接的协议– 限制每次连接只处理一个请求HTTP是无状态的协议– 协议对于事务处理没有记忆能力二会话管理的产生对于简单的页面浏览或信息获取HTTP协议即可胜任– 浏览资讯– 查看在线图书目录对于需要客户端和服务器端多次交互的网络应用则必须记住客户端状态– 网上的购物车– 用户登录三会话管理概念会话就是一个客户端连续不断地和服务器端进行请求/响应的一系列交互。多次请求间建立关联的方式称为会话管理或会话跟踪。会话状态指服务器与浏览器在会话过程中产生的状态信息。四会话的实现过程HTTP没有提供任何记住客户端的途径服务器如何建立、维护与客户端的会话当服务器接收到客户端的首次请求时服务器初始化 一个会话并分配给该会话一个唯一标识符。在以后的请求中客户端必须将唯一标识符包含在请求中服务器根据此标识符将请求与对应的会话联系起来。二、使用Cookie、隐藏域、URL重写实现会话管理一会话管理使用Cookie所有的HTTP消息不管是请求还是响应均包含头信息。当服务器返回响应给客户端时Servlet容器把会话的信息添加到响应头信息中。客户端浏览器接收到响应后提取头信息并将其存储在本地机中以后发送请求时会自动将该信息带回服务器端。浏览器存储在客户端机器上的头信息称作Cookie它以“属性名属性值; …”方式组成文本信息。1. 示例使用Cookie实现用户登录2. 创建并向客户端发送Cookie创建Cookie对象调用Cookie的构造方法给出Cookie的名称和Cookie的值二者都是字符串Cookie cnewCookie(userName,a1234)设置最大时效如果要告诉浏览器将Cookie存储到磁盘上而非仅保存在内存中使用setMaxAge方法(参数为秒数)c.setMaxAge(60*60*24*7)//一周(正数)将Cookie放入到HTTP响应中使用response.addCookie(c)如没有这一步将不会有任何Cookie被发送到浏览器3. 从客户端读取Cookie调用request.getCookies得到Cookie对象组成的数组循环数组调用每个对象的getName找到想要的cookie根据应用程序调用getValue方法使用这个CookieCookie[]cookiesrequest.getCookies();if(cookies!null){for(Cookie cookie:cookies){if(userId.equals(cookie.getName())){//doSomethingWith(cookie.getValue());}}}4. Cookie的方法函数功能补充说明getMaxAge()读取Cookie到期时间(秒)- 如果值为0表示删除对应的Cookie- 如果值为负数表示Cookie只适用于当前的浏览会话- 默认值为-1setMaxAge()设置Cookie到期时间(秒)-getName()读取Cookie的名称不存在setName() 方法getValue()读取与Cookie关联的值-setValue()设置与Cookie关联的值如果重新设置了某Cookie的值需要用addCookie()方法将其发送回去5. Cookie的优缺点优点– 可配置到期规则数据可持久保存–不需要服务器资源数据保存在客户端– 简单性基于文本的Key-Value对缺点– 大小受到限制(总数300;20/站点;4KB/Cookie)–用户可禁用客户端接收Cookie的功能– 潜在的安全风险二会话管理使用隐藏的表单域思想通过使用隐藏域由浏览器主动告知服务器多次请求间必要的信息如在线问卷作答优点Cookie被禁用或者根本不支持的情况下依旧能够工作缺点–关掉网页后会遗失先前的请求信息– 所有的页面必须是表单提交之后的结果三会话管理使用URL重写思想– 当服务器响应浏览器上一次请求时将某些相关信息以超链接方式响应给浏览器超链接中包括请求参数信息– 由于GET方式发送请求通常URL重写用于简单客户端信息保留或辅助Session会话管理三、Session会话管理的原理和技术实现一Session在Servlet中进行会话管理可以使用HttpServletRequest的getSession()方法取得HttpSession对象(简称为Session)通过设置/获取服务器端Session对象的属性来保留请求之间的相关信息。Servlet容器提供Session接口来代表服务器端和客户端的会话。当一个WEB服务器为客户端开始一个会话时创建一个新的Session对象(含有特殊ID称为Session ID默认用Cookie存放在浏览器中。在Tomcat中Cookie的名称为JSESSIONID)。Session将数据存储在服务器的内存中供以后来自同一个客户端的请求使用。二示例使用Session实现用户登录三使用Session对象通常分三个步骤获取一个与请求相关联的会话HttpSession session request.getSession();从Session中设置或获取一个属性–session.setAttribute(“userName”,userName);–session.getAttribute(“userName”);根据需要关闭会话–session.invalidate();–通常客户端不提供结束会话的通知而是Servlet容器在用户处于一段非活动期后就会自动的使会话失效——这个时间段称为会话的超时期。四会话失效Session对象失效当用户超出指定会话期时间处于非活动状态时会话自动结束。– setMaxInactiveInterval()设置会话的超时期– 通过web.xml的 session-timeout标签设置– 使用方法invalidate()Cookie失效– 默认关闭浏览器Cookie消失– 在web.xml中设定存储Session ID的Cookie存活期限五Session与URL重写当用户浏览器禁用Cookie时仍打算运用Session来进行会话管理可以对所有的URL使用URL重写。六Session的方法方法功能getAttribute()从会话对象中提取出一个之前存储的属性值。如果没有找到与名称相关联的值则返回nullsetAttribute()设置会话对象的属性名称和属性值removeAttribute()移除与名称关联的值getAttributeNames()返回会话中所有属性的名称getId()返回唯一的标识符isNew()确定会话对于客户来说是否为新创建getCreationTime()返回会话创建的时间getLastAccessedTime()返回客户端最近一次发送请求的时间getMaxInactiveInterval()取得会话的超时期setMaxInactiveInterval()设置会话的超时期invalidate()废弃当前的会话
返回列表