前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >状态管理-Session

状态管理-Session

作者头像
qubianzhong
发布2018-08-10 16:42:23
5840
发布2018-08-10 16:42:23
举报
文章被收录于专栏:行者常至

Session

什么是Session(会话)
  • 浏览器访问Web服务器时,服务器会为每一个浏览器在服务器端的内存中分配空间,单独创建一个Session对象,该对象有一个Id属性,其值唯一,一般称之为SessionId,并且服务器会将这个SessionId(使用Cookie的方式)发送给浏览器;浏览器再次访问服务器时,会将Session发送给服务器,服务器可以依据SessionId找到对应的Session对象。
Session工作原理
如何获取Session
代码语言:javascript
复制
HttpSession s = request.getSession(boolean flag);
  • HttpSession是个接口,后面返回的是符合接口规范的对象
  • 当flag为true时:先查看请求中有没有SessionId,如果没有SessionId,服务器创建一个Session对象;如果有SessionId,依据SessionId查找对应Session对象,找到则返回,找不到则创建一个新的Session对象,所以flag为true时,一定能得到一个Session对象
  • 当flag为false时,没有SessionId及有SessionId但没有找到Session对象,均返回null;找到则返回。
代码语言:javascript
复制
HttpSession s = request.getSession()
  • 等价于request.getSession(true)
  • 提供该方法是为了代码书写更方便一些,大部分情况下是不管找没找到都需要返回一个Session对象。
如何使用Session绑定对象
代码语言:javascript
复制
//绑定对象:
void Session.setAttribute(String naem,Object obj);
//获取绑定对象:
Object Session.getAttribute(String name);
//移除绑定对象
void Session.removeAttribute(String name);
/*
注:getAttribute方法的返回值是Object类型,在去除数据时要对其进行数据类型转换,且必须与我们存入的数据类型一致。
*/
如何删除Session对象
  • 立即删除Session对象
代码语言:javascript
复制
Session.invalidate();
Session验证
  • 用户访问需要保护的资源时,可以使用Session验证的方式来保证其安全性,比如要求登录后才能访问的资源
  • 实现Session验证,遵循以下步骤
    • 1、使用Session.setAttribute()先绑定数据
    • 2、使用Session.getAttribute()方式来读取绑定值,如果没有则返回登录页面。

Session超时

什么是Session超时
  • Web服务器会将空闲时间过长的Session对象删除掉,以节省服务器内存空间资源
  • Web服务器缺省的超时时间限制:一般是30分钟
如何修改Session的缺省时间限制
  • 通过修改Tomcat中conf/web.xml文件的设置
代码语言:javascript
复制
<session-config>
    <session-timeout>30</session-timeout>
</session-config>
  • 通过编程的方式来修改
代码语言:javascript
复制
void session.setMaxInactiveInterval(int seconds);
浏览器禁用Cookie的后果
  • 如果浏览器禁用Cookie,Session将不能使用。
  • 服务器在默认情况下,会使用Cookie的方式将SessionId发送给浏览器,如果用户禁用Cookie,则SessionId不会被浏览器保存,此时,服务器可以使用如URL重写这样的方式来发送SessionId。
URL重写
  • 浏览器在访问服务器上的某个地址时,不再使用原来的那个地址,而是使用经过改写的地址(即,在原来的地址后面加上了SessionId)
如何实现URL重写
  • 如果是链接地址和表单提交,使用response.encodeURL(String url)生成重写后的URL
  • 如果是重定向,使用response.encodeRedirectURL(String url)生成重写后的URL
Session的优缺点
  • 优点
    • 安全(将状态保存在服务器端)
    • Session能够保存的数据类型更丰富,Cookie只能保存字符串
    • Session能够保存更多的数据,Cookie大约保存4K
  • 缺点
    • Session将状态保存在服务器端,占用服务器的内存,如果用户量过大,会严重影响服务器的性能
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年07月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Session
    • 什么是Session(会话)
      • Session工作原理
        • 如何获取Session
          • 如何使用Session绑定对象
            • 如何删除Session对象
              • Session验证
              • Session超时
                • 什么是Session超时
                  • 如何修改Session的缺省时间限制
                    • 浏览器禁用Cookie的后果
                      • URL重写
                        • 如何实现URL重写
                          • Session的优缺点
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档