文档章节

httpsession 详细内容整理【转】

hefeiuu
 hefeiuu
发布于 2017/05/04 20:27
字数 1265
阅读 2
收藏 0
点赞 0
评论 0
最近在做登录和权限控制模块,用到了session,发现session的好多方法都不熟悉,而且以前也听说过JsessionId 之类session窃取的事,对这些一直都是一知半解。今天索性google了很多资料,先上sun的官网去看session的文档了解一些方法,又找了别人关于session的看法。
总结如下:
      1,session是什么?  what
          session经常译为会话,以打电话为例,从开始拨号到挂断电话就是你会话的生存周期。
      2,session 做什么用的  why?
          首先举个例子:
                咖啡店举行 消费满5杯咖啡赠送一杯的活动,可每个人一次消费5杯的时候非常少。这时候有3种办法:
                1,店员看到每个顾客时都能记住其消费了多少杯,从而给其优惠,这是协议本身具有状态
                2,给每个顾客一个卡片,上面记录顾客的每次消费,这是客户端保存状态
                3,给每个顾客一个卡片,卡片上只有一个编号,顾客每次的消费记录在店里,这就是 服务端有状态
          而http本身是无状态的,所以我们只能使用2,3中方法,来保存一些信息。
          实际采用的是第3种方法,服务器段保存一次会话所有的信息,并生成一个唯一的id,这个id没有规律而且不会重复,将这个id传回到客户段,保存到cookie中。每次访问服务器时,客户端都会偷偷将这个id传到服务器,服务器根据id查到这次会话保存的内容。就能实现会话中共享一些数据。
     3,session怎样创建和销毁 ? how
         session是保存在内存中的,所以会有一些性能上的影响。因此本着这个原则,session是只有在使用到的时候才会被创建,如果始终没有用到session,这个session是永远不会被创建的。
        比如: 访问servlet ,只要你代码中没有 request.getSession()或request.getSession(true);这两行是等价的,那session是不会创建。又 当你访问静态页面时,根本不会生成servlet,所以也不会创建session。
       下面解释一些疑惑: session是第一次请求时创建的?
  大家都知道 jsp是被编译成servlet才执行的,问题就在jsp编译的过程。
jsp中有个<%@ page session="true/false"%> 这个开关表示是否创建session,当你不写这行时,它会默认给你加上这句。所以会造成上面的疑惑。当然还有一些标签中可能有getSession()操作,会产生一些不必要的session。
       session只能在服务端销毁,有三种途径: 1,到达session的最大请求间隔时间时,2,session。invalidate()
3,服务器进程当掉。
       这里也有一些疑惑: 浏览器关闭时,session就会注销。
       首先浏览器关闭时,浏览器并没有给服务器发送任何消息,所以服务器不会知道浏览器何时关闭了。
上面我们知道取得session 是因为浏览器cookie中有sessionid,而普通cookie通常会是会话cookie,也就是说浏览器关闭时,这个cookie会被注销,所以当你再访问服务器时就没有sessionid了,所以造成session关闭了的假象,如果昵称通过特殊方法将sessionid传递给服务器,你会发现session还在。
如果想让cookie保存时间长一些,就需要手动指定cookie的过期时间

4,实际项目中的难点:
     1,浏览器禁用cookie
      这就没办法保存sessionid了,可以采用url重写,转发,加隐藏字段等方法来将sessionid传给服务器。
     如:  baidu.com:jsessionid=adfasdfasdfasdfasdfafdadf?asdfasdf
             baidu.com?jsessionid=asdfasdfasdfadsfad&&adfdf
这根据服务器的不同实现,第一种可以将普通参数区分开。

     2,多人共用session的问题
        例: a 访问 baidu.com ,但他没有帐号,于是他将连接 baidu.com/login.jsp?jsessionid=adsfasdfad(这个a的sessionid) 发给B, B登录后,a就相当于用b的帐号登录了。你们可以在在本地试试。
        解决方法: 当发现通过sessionid从url指定时, 创建一个新的session,将旧session的信息复制到 新sessoin中,然后将新session注销。就能防止上面那种情况了。
    3,一个帐号多地方登录
       比如: 你用abc帐号登录了baidu.com,有打开了一个浏览器,又用abc帐号登录了一次。当不设计敏感操作时,这无所谓,而当你做一些敏感操作时就必须禁止这样情况,防止同时操作,造成重复操作,或者数据损坏。
     解决方法: 监听session,将username和sessionid对应起来,当username再次登录时,注销掉以前的session,保存现在的session,这也是一种比较不错的方案。

本文转载自:http://ufopw.iteye.com/blog/962499

共有 人打赏支持
hefeiuu
粉丝 3
博文 64
码字总数 0
作品 0
合肥
萨克斯,音符的悠扬(Session管理)

一.前言   小朽不才,最近喜欢上了萨克斯,一年计划[传送门]中的实行。就伴随着一首萨克斯,整理了下Session管理和Session四种技术。   保存状态:        #网址重写(URL rewri...

泥沙砖瓦浆木匠坊 ⋅ 2014/03/10 ⋅ 0

D2RQ sql数据转RDF效率慢问题解决

问题描述 今天使用D2RQ对采集的大量级sql数据进行RDF转化时,出现效率较慢问题。 使用D2RQ中的 dump-rdf.bat命令工具转化时,添加 --verbose 参数,来观察转化日志,发现会卡在所构建的大数据...

weberweber ⋅ 04/11 ⋅ 0

正在把日志转换成Log4j2

2017年5月6日,近来又发现一篇关于log4j2的使用,非常详细Log4j2 简明教程 去年转了一篇关于log4j2的使用,那时只是简单的转文章,并没有使用。现在在整理以往的资料,打算全部使用log4j2,以...

夏碌冬藏 ⋅ 2016/04/16 ⋅ 0

weixin-java-tools 1.3.0,微信公众企业开发 SDK

weixin-java-tools 1.3.0 发布,更新内容如下: PR #198 增加企业号异步任务接口 PR #202 增加点击图文消息跳转链接 issue #200 修改 WxMpServiceImpl#oauth2buildAuthorizationUrl javadoc错...

简单代码 ⋅ 2015/09/18 ⋅ 4

Java for Web学习笔记(八六):消息和集群(1)一般性了解

应用消息:紧耦合和松耦合 应用消息常用的是RPC和发布/订阅,其实就是分布代表了同步和异步。随着大系统的发展,微服务架构的兴起,松耦合的发布订阅模式越来越流行。 以员工系统为例,涉及财...

flowingflying ⋅ 2017/11/10 ⋅ 0

【学习笔记15】访问或添加几个属性

一、访问或添加request/session/application属性: Action:public String scope() throws Exception{ActionContext ctx = ActionContext.getContext();ctx.getApplication().put("app", "应......

张超 ⋅ 2013/04/15 ⋅ 1

Spring Security认证系统浅析

Spring Security是个安全框架众所周知,同时也提供了一整套基于Web的认证机制和安全服务,当然如果你要通过其他协议的来实现安全服务,你也可以使用SpringSecurity来帮助你。 今天主要是讲解...

小花卷juan ⋅ 2017/06/03 ⋅ 0

(五)JSP语法详细介绍--jsp九大内置对象

一、jsp内置对象是指不用声明就可以在jsp页面的脚本部分直接使用的组件 是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP内置对象也被称为预定义变量。 按照期...

iborder ⋅ 2016/09/05 ⋅ 0

Java Web基础知识之Listener:监控Servlet的每个动作

之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监...

lmy86263 ⋅ 2016/04/21 ⋅ 0

对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)

转自:http://blog.csdn.net/xxd851116/article/details/4296866 【前面的话】 在网上经常看到有人对request.getSession(false)提出疑问,我第一次也很迷惑,看了一下J2EE1.3 API,看一下官网...

挨踢人生 ⋅ 2014/05/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

tcp/ip详解-链路层

简介 设计链路层的目的: 为IP模块发送和接收IP数据报 为ARP模块发送ARP请求和接收ARP应答 为RARP模块发送RARP请求和接收RARP应答 TCP/IP支持多种链路层协议,如以太网、令牌环往、FDDI、RS-...

loda0128 ⋅ 今天 ⋅ 0

spring.net aop代码例子

https://www.cnblogs.com/haogj/archive/2011/10/12/2207916.html

whoisliang ⋅ 今天 ⋅ 0

发送短信如何限制1小时内最多发送11条短信

发送短信如何限制1小时内最多发送11条短信 场景: 发送短信属于付费业务,有时为了防止短信攻击,需要限制发送短信的频率,例如在1个小时之内最多发送11条短信. 如何实现呢? 思路有两个 截至到当...

黄威 ⋅ 昨天 ⋅ 0

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 昨天 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部