session

来源:互联网 发布:caffe 图像分割代码 编辑:程序博客网 时间:2024/05/03 02:59
 

一、什么是session

使用cookie和附加url参数都可以将上一次请求的状态消息传递到下一次请求中,但是如果传递的状态信息较多,将极大地降低网络传输效率和增大服务器端程序处理的难度

Session技术是一种讲会话状态保存在服务器端的技术

客户端需要接受、记忆和回送session的会话标识号,Session可以通常借助cookie来传递会话标识号

二、Session的跟踪机制

Htttpsession接口中定义了各种管理和操作会话状态的方法

Httpsession对象是保持会话状态信息的存储机构,一个客户端在web服务器web服务器对应一个各自的httpsession对象

Web服务器并不是在客户端开始访问就创建httpsession对象的,只有客户端访问某个能与客户端开启会话的servlet程序时,web应用程序才会创建一个与改客户端对应的httpsession对象

Web服务器为httpsession对象分配一个独一无二的会话标识号,然后在响应消息中将这个回话标识号传递给客户端。客户端需要记住会话标识号,并在后续的每次访问请求中都把这个会话标示好传送给web服务器,eb服务器端程序依据回传的会话号就知道这次请求是哪个客户端发出的,从而选择与之对应的httpsession对象

Web应用程序创建了与某个客户端对应的httpsession对象后。只要没有超出一个限定的空闲时间段,httpsession对象就驻留在web服务器内存之中,该客户伺候访问任意的servlet程序时,他们都是用与客户对应的那个已经存在的httpsession对象

Httpsession接口中定义了一个setAttribute方法来将对象存储到httpsession对象中还定义了getAttribute方法来检索在httpsession对象中的对象,存储进httpsession中的对象可以被属于同于一个会话的各个请求的处理程序共享

Session时实现网上商城的购物车的最佳方案,存储在某个客户session中的一个集合对象就可以充当该客户的一个购物车

三、Session超时管理

Web服务器无法判断当前的客户段浏览器是否还会继续访问,业务无法检测客户端浏览器是否关闭,所以,即使客户已经离开或关闭了浏览器,web服务器还是要保留与之对应的httpsession对象

随着时间的推移而不断增加的新的访问客户端,web服务器内存中将会因此积累起大量的不再被使用的httpsession对象,并将最终导致服务器内存耗尽

Web服务器采用“超时限制”的办法来判断客户端是否还在继续访问,如果某个客户端在一定的时间之内没有活动,web服务器则认为客户端已经停止了活动,结束与该客户端的会话并将与之对应的httpsession对象变成垃圾

如果客户端浏览器超后再发出请求,web服务器则认为这是一个新的会话,将为之创建新的httpsession对象和分配新的会话标识号

会话超时间隔可以再web.xml文件中设置,其默认值由servlet容器

<session-config><session-Timeout></ session-Timeout ><config-><session-config>

若是在一个单独的项目中的web.xml文件中设置的话,只对该该项目有效

若是在tomacat中的web.xml文件中设置的话,则对在tomacat中所有的项目都有效

四、httpsession接口中的方法

getId()方法、getCreateTime()方法、getLastAccessedTime()方法、setMaxInactiveInterval()方法、getMaxInactiveInterval()方法、invalidate()方法、getServletContext()方法、setAttribute()方法、getAttribute()方法、removeAttribute()方法、getAttributeNames()方法、isRequestedSessionIdValid()方法、isRequestedSessionIdFromCookie()方法、isRequestedSessionIdFormURL()方法

isNew()方法

如果客户端请求消息中返回了一个与servlet程序当前获得的httpsession对象标识号相同的会话标识号,则认为这个httpsession对象不是新建的

getsession()方法

不带参数:

Httpsession session=request.getsession();

如果session对象不存在,创建session对象

如果session对象存在,获取session对象并引用

带参数:

Httpsession session=request.getsession(false);

如果session对象不存在,返回null

如果session对象存在,获取session对象并引用

五、application域范围的属性

六、session域范围的属性

七、application与session域范围的属性的比较

HttpSession session=request.getSession();

HttpSession sessionCount=(Integer)session.GetAttribute(“count”);

Int cout=0;

If(sessionCount!=null){

       Count=sessionCount.intValue();

}

Out.println(“当前会话中发生了”+(++count)+”次访问<br>”);

Session.setAttribute(“count”,new Integer(count));

Count=0;

ServletContext application=getAttribute(“count”);

If(applicationCount!=null){

       Count=application.intValue();

}

Out.println(“web应用程序中发生了”+(++count)+”次访问<br>”);

Alication.SetAttribute(“count”,new Integer(count));

 

五、利用cookie实现session跟踪

       如果web服务器处理某个访问时创建了新的httpsession对象,他将把回话标识号作为一个cookie项加入到响应消息中,通常情况下,浏览器随后发出的访问请求中又将会话标识号一cookie的形式回传给web服务器

Web服务器程序一句回传的会话标识号就知道以前已经为该客户端创建新的httpsession对象,而是直接使用与该会话标识号匹配的httpsession对象。通常这种方式实现了对同一个客户端的会话状态的跟踪

六、利用url重写实现session跟踪

Servlet规范中引入了一种补充的会话管理机制,它允许不支持cookie的浏览器也可以与web服务器保持连续的会话。这种补充机制要求在响应消息的实体内容中必须包含下一次的请求的超链接,并将会话标识号做为超链接的url地址的一个特殊参数

将会话标识号以参数形式附加在超链的url地址后面的技术称为url重写。如果在浏览器不支持cookie后者关闭了cookie功能的情况下,web服务器还要能被客户端访问的请求路径(包括超链接、form表单的action的属性设置和重定向的url)进行url重写

Httpservletresponse接口中定义了两个用于完成url重写方法:

EncodeURL方法、encodeRedirectURL方法

七、session典型案例

7-1、使用session实现购物车

7-2、利用session防止表单的重复提交

7-3、利用session实现一次性验证码

7-4、跟踪用户上次访问站点的时间以及cookie中文问题

八、使用session实现购物车---------------功能说明à

loginServlet:

       Httpsession session=request.getsession();

       Session.setAttribute(“name”,naem);

       转到web其他的页面去查看商品

BuyServlet:

List cart购物车

Cart.add(good);

Httpsession session=request.getsession();

Session.add(cart);

/*

Httpsession session=request.getsession(false);

If(session==null){

       跳到登陆页面

}

Session.add(cart);

*/

 


购物车的流程:

一、登陆界面:

 

二、首页:通过initservlet实现

看到所有的商品

Id   名称      价格    超链接

1               洗衣机    800     <a href=”/web/buyServlet?id=1”>加入购物车</a>

2               电视   2000     <a href=”/web/buyServlet?id=2”>加入购物车</a>

3               Mp4    100     <a href=”/web/buyServlet?id=3”>加入购物车</a>

4               录音机    300     <a href=”/web/buyServlet?id=4”>加入购物车</a>

 

三、buyServlet:

先获取到要购买的商品的id

通过id来获取商品对象good

要判断是不是第一次购买

       List cart=new ArrayList();

       Cart.Add(good);

       Session.setAttribute(cart);

       跳到显示购物车的页面  ListCartServlet

原创粉丝点击