J2EE学习总结之——会话数据管理cookie和Session
来源:互联网 发布:迅雷你的网络未连接 编辑:程序博客网 时间:2024/06/07 13:38
一、什么是会话?
简单来说:
会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
有状态会话:用户甲访问网站A,下次再访问A网站,A网站知道这甲这个用户曾经访问过自己,这称之为有状态会话。
二、javaWeb在会话过程中要解决的问题:
每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据。
三、保存会话数据两种技术
1、cookie:是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
2、session:是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
四、Cookie操作实例:
1、设置cookie的java类
<span style="font-family:KaiTi_GB2312;font-size:18px;">import javax.servlet.http.*;import javax.servlet.*;import java.io.*;public class SetCookie extends HttpServlet { protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException {Cookie c1 = new Cookie("Bill","234");resp.addCookie(c1);Cookie c2 = new Cookie("Cindy","93");c2.setMaxAge(60*60);resp.addCookie(c2);resp.setContentType("text/html;charset=UTF-8");resp.getWriter().println("setSession Succeed!"); }}</span>
2、获取Cookie的Java类:
<span style="font-family:KaiTi_GB2312;font-size:18px;">import java.io.*;import javax.servlet.http.*;import javax.servlet.*;public class ShowCookies extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Cookie[] cookie = request.getCookies();for(int i=0;i < cookie.length;i++){Cookie c = cookie[i];System.out.println(c.getName()+c.getValue());response.getWriter().println(c.getName()+c.getValue());}}}</span>
五、Session操作实例:
1、设置Session的java类
<span style="font-family:KaiTi_GB2312;font-size:18px;">import java.io.*;import javax.servlet.http.*;import javax.servlet.*;public class SetSession extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session = request.getSession(true);// session.setAttribute("URL", request.getRequestURL());session.setAttribute("host",request.getRemoteHost());response.getWriter().println("setSession Succeed!");}}</span>
2、获取Session的Java类:
<span style="font-family:KaiTi_GB2312;font-size:18px;">import java.io.*;import javax.servlet.http.*;import javax.servlet.*;public class ShowSession extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session = request.getSession(true); // StringBuffer URL = (StringBuffer)session.getAttribute("URL"); String host = (String) session.getAttribute("host");response.getWriter().println("host=" + host);}}</span>
六、关于cookie和session要注意的细节
1、使用cookie
一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)
一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
2、使用session:
失效时间: session对象默认30分钟没有使用,则服务器会自动销毁session,在服务器的web.xml文件中可以手工配置session的失效时间。如下代码
<span style="font-family:KaiTi_GB2312;font-size:18px;"> <session-config> <session-timeout>30</session-timeout> </session-config></span>
当禁用了cookie之后要使用URL重写来实现
response.encodeRedirectURL(java.lang.String url) 用于对sendRedirect方法后的url地址进行重写。
response.encodeURL(java.lang.String url)用于对表单action和超链接的url地址进行重写
七、小结和拓展:
cookie和session的关系:根据session的实现原理,在Web客户端和Web服务端,同时存储一份Sessionid,在session的生命周期内,首先服务端生成了sessionid后,通过httpresponse对象将sessionid返回到web客户端,并写入到cookie中。客户端再次发送请求的时候,会在cookie中获取到sessionid等一些信息,通过httprequst对象发送到服务器端,web服务端通过request对象的getSession方法获取到session信息。
Cache:它存储于 服务器的内存中,允许您自定义如何缓存项以及将它们缓存多长时间。例如,当缺乏系统内存时,缓存会自动移除很少使用的或优先级较低的项以释放内存。该技术 也称为清理,这是缓存确保过期数据不使用宝贵的服务器资源的方式之一。
优点:它不与会话相关,所以它是多会话共享的,是所有用户都可以访问和共享的,因为从Cache中读数据比较快,因此使用它可以提高网站性能
缺点:但是可能泄露 用户的安全信息,还由于在服务器缺乏内存时可能会自动移除Cache因此需要在每次获取数据时检测该Cache项是否还存在。
MermCached:是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信
- J2EE学习总结之——会话数据管理cookie和Session
- J2EE基础之——cookie和session
- php学习之会话应用cookie和session
- 【J2EE核心开发学习笔记 007】 Cookie Session会话管理
- 会话技术 cookie和session 学习笔记
- Servlet规范之会话:Session和Cookie
- java HttpServlet 之 会话Cookie和Session
- J2EE进阶之Cookie和Session 十一
- PHP会话处理——Cookie和Session
- 会话之Session与Cookie
- 会话(Session和cookie)
- 分析会话:COOKIE 和 SESSION
- 会话技术 Cookie和Session
- 会话技术:session 和 cookie
- JavaWeb -- 会话, Cookie 和 Session
- 会话技术Cookie和Session
- 会话技术:Cookie和Session
- 会话技术session和cookie
- Android特效 五种Toast详解
- JAVA——集合框架的工具类Collections
- 第6课:Spark Streaming源码解读之Job动态生成和深度思考
- java垃圾收集器
- PAT CCCC天梯赛模拟赛 N个数求和(分数求和)
- J2EE学习总结之——会话数据管理cookie和Session
- Android单元测试
- 深入理解容器系列之五--------hashcode和equal
- C++内存分布 虚表 虚指针(非常重要)
- Java 常用排序算法
- 浅谈 EOF,BOF
- 杂记 - 老书店
- 智能网联汽车发展现状与趋势分析
- hzauoj Problem H: Eat Candy (暴力)