html----session

本质:

一个容器,存放会话过程中的任何对象

同一会话中多个request共享一个session对象, 可以直接从请求中获取session对象

位置:

session的创建和使用总在服务器端,浏览器从未得到过session对象。但浏览器可以通过请求Servlet来获取session的信息(sessionId...),即客户端浏览器真正拿到的是sessionId。

-->文件可通过HttpSession.getId()来获得sessionID

生成时间:

某server端程序调用HttpServletRequest.getSession(true);

没有显示使用<%@ page session="false"%>关闭session时,Jsp文件编译时会自动添加 HttpSession session=HttpServletRequest.getSession(true); 

-->由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。

。第一次访问服务器

。新开的浏览器窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session

。访问*.html的静态资源因为不会被编译为Servlet,也就不涉及session的问题

死亡时间:

程序调用HttpSession.invalidate()

服务器关闭或服务停止

session超时:连续一定时间服务器(超过服务器设置的最大超时时间)没有收到对应客户端请求,session失效

除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭。故此,服务器为session设置了失效时间

      当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空      间。

关闭浏览器后,session不会消失。实际上,除非程序通知服务器删除)一个session,否则服务器会一直保留该session。

关闭浏览器后,sessionID会消失。再次链接服务器后无法找到之前的sessionID也就无法找到原来的session,若服务器设置的cookie被保存到硬盘上或使用某种手段改写浏览器的http请求头部,把原来的sessionID发送给服务器,而原来的session未被删除或未失效则仍可以找到原来的session

大体过程:

打开浏览器第一次请求jsp

服务器自动为其创建一个session,将sessionID发送给客户端的浏览器

客户端请求本应用中其他资源,自动在请求前添加 Cookie:JSESSIONID=客户端第一次拿到的sessionID

服务器收到请求后,通过收到的id在内存中找到之前创建的session对象,

提供请求

原理:

session机制是一种服务器端的机制,服务器使用一种类似于散列表来保存信息。

1.程序接收到客户端的请求时

①服务器检查到客户端的请求已经包含一个sessionID标识,并能通过其检索出来相关联的session,使用该session;

服务器检查到客户端的请求已经包含一个sessionID标识,不能通过其检索出来相关联的session,新建一个session;

服务器检查到客户端的请求不包含session标识,则程序为客户端创建一个session并生成一个与之相关联的sessionId,后者在本次响应中返回给客户    端保存

2.保存sessionId

①cookie    

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

当cookie被人为禁止时,

 IURL重写,即把sessionID直接附加在URL路径的后面-->

 i   作为URL路径的附加信息---原url+“;”+"jsessionid=........" __sessionID信息和正常程序参数区分

  ii   作为查询字符串---原url+“?”+“jsessionid=.......”

               为了在整个交互过程始终保持状态,必须每个客户端可能请求的路径后面都包含这个sessionID

 II 表单隐藏字段,即服务器自动修稿表单添加一个隐藏字段,以便提交变淡能够把sessionID传递回服务器

          <input type="hidden"name="jsessionid"value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"> 
      但是这种技术很少应用,简单地用URL重写入action来代替。

常用方法:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值